Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Problem mit MS DOS und C

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
06.02.2006, 13:58 Uhr
~Hanss
Gast


Hi zusammen!

Ich möchte mit einem C-Programm 2 Umgebungsvariablen in MS DOS setzen und dann mithilfe eines system() - Befehls darauf zugreifen.
Der Systembefehl soll im Detail ein netzlaufwerk anbinden, wobei in den Umgebungsvariablen der benötigte Benutzername und das Passwort zum Anbinden enthalten sind.


C++:
void main(int argc, char **argv)
{
                _putenv("USER=Benutzer");
                _putenv("PASSWD=beliebig");
                 system("net use s: \\Computer %PASSWD% /USER:%USER%");
                _putenv("LMUSER=");
                _putenv("LMPASSWORT=");        
}



Das setzen der Umgebungsvariablen funktioniert, das Aufrufen des Befehls ebenfalls.
Leider kann der durch system () aufgerufene Befehl nicht auf die Umgebungsvariablen zugreifen, da der System-Befehl in einer Sub-Shell ausgeführt wird und demnach die Umgebungsvariablen nicht "erreichen" kann.

Hat evtl. jemand von euch schonmal damit zutun gehabt und hat eine Idee dies zu umgehen oder alternativ-Ideen, die einen anderen WEg einschlagen und trotzdem das gleiche bewirken ?

Bin für jeden Tip dankbar!

Viele Grüße,
Hanss
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.02.2006, 14:20 Uhr
Tommix



Hallo,
an den Variablen sollte das nicht liegen:

C++:
#include <windows.h>

int main()
{
    SetEnvironmentVariable("Hello", "World");
    system("set");

    return 0;
}


geht schon mal. Wieso willst Du über Umgebungsvariablen gehn? Du kannst doch die Kommandozeile

C++:
system("net use s: \\Computer beliebig /USER:Benutzer");


beispielsweise mit sprintf schon im Programm zusammenbauen.
BTW system is bad.

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.02.2006, 14:31 Uhr
~Hanss
Gast


Hi,

schonmal danke für die Antwort!

Entschuldigung, ich hätte etwas mehr ins Detail gehen sollen:
Das ganze findet in einer 16Bit MS DOS Umgebung statt und dient dazu, eine im Erstinstallationsverfahren erfolgende Netzlaufwerkanbindung herzustellen. Bisher wurde das durch eine einfache batch-datei geregelt, die aber aufgrund der Einsehbarkeit nun durch ein C-Programm ersetzt werden soll.

Windows.h etc, fällt demnach leider weg.

Gruß,
Hanss
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
06.02.2006, 14:40 Uhr
Tommix



Das ist zwar ohne Belang, aber von mir aus:

C++:
#include <stdlib.h>

int main()
{
    _putenv("hello=world");
    system("set");

    return 0;
}


Ausgabe:

Code:
...
HELLO=world



- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
06.02.2006, 15:09 Uhr
~Hanss
Gast


Gebe ich dir völlig recht. Bei mir funktioniert das auch - sofern ich es 32bit kompiliere.
Kompiliere ich das C-File 16bit, dann gibt er mir bei einem


C++:
system("echo %USER% %PASSWD%");



nur

Code:
%USER% %PASSWD%



aus.



Leider kenne ich mich nicht besonders mit Kompilern aus, als das ich ergründen könnte, woran es liegt.
Denn anscheinend hat es etwas damit zutun ?!

Grüße,
Hanss
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
06.02.2006, 15:25 Uhr
Tommix



Ich dachte immer, Windows ist MS-DOS mit ein paar bunten Bilderchen dazu.
Nein, da weiß ich auch nicht weiter.

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
06.02.2006, 15:42 Uhr
~Hanss
Gast


Kein Problem, danke trotzdem, dass du dir Zeit genommen hast.

Grüße,
Hanss
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
06.02.2006, 17:18 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


evtl wertet die 16-Bit clib das anders aus, wodurch env-Vars nicht ersetzt werden im system aufruf. Nur wie gesagt, Wieso über Umgebungsvars? Ansonsten sollte die Subshell doch trotzdem das gleiche Env wie das Programm selbst von dem es aufgerufen wird haben?
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
06.02.2006, 19:39 Uhr
~f.-th.
Gast


batch funktioniert.
anderer weg: schreib in c ein programm das deine batchdatei erstellt und danach ausführt.

ich müsste mich erst wieder einarbeiten: aber c hat doch wahrscheinlich andere möglich-
keiten ein anderes programm zu starten ausser "system" mit wahrscheilich anderen neben-
wirkungen.

mfg f.-th.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
07.02.2006, 00:33 Uhr
Hans
Library Walker
(Operator)



Zitat von ~f.-th.:
ich müsste mich erst wieder einarbeiten: aber c hat doch wahrscheinlich andere möglich- keiten ein anderes programm zu starten ausser "system" mit wahrscheilich anderen neben- wirkungen.

mfg f.-th.


Ja, bei Turbo-C++ und auch im BCB gibt es spawn() und exec() in verschiedenen Geschmacksrichtungen. Habe damit aber noch nie was gemacht, weshalb ich dazu nichts weiter sagen kann. Sie sind mir aber halt mal aufgefallen...

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: