Was soll COMSPEC-und PATH-Umgebungsvariablen sein, suchen Sie die Befehls-interpreter, mit system()?
Sind das OS (XP) Umwelt-Variablen, die gleich verwendet, in einem Prozess ausgeführt wird, der von visual studio .NET C++?
Scheint es der Kommando-interpreter nicht gefunden wird:
Bei der Verwendung von NULL als Sie den Befehl, system() gibt 0 zurück und mit Befehl - ENOENT Command interpreter cannot be found
.
In windows - (System->Umgebungsvariablen), VERWEISEN enthält den Pfad zu cmd.exe
PFAD nicht.
Was soll WEG sein?
Andere als diese, nicht sicher, warum Sie es nicht finden können, den Dolmetscher.
Anregungen werden geschätzt. Danke.
if( system("tail -500 log.txt") == -1)
{
//Error calling tail.exe on log
//errno is a system macro that expands int returning
//the last error. strerror() converts the error to it's
//corresponding error message.
printf("Error calling tail.exe with system(): %s",strerror( errno ));
}
EDIT1
Ein Schritt in system() argv[0] = _tgetenv(_T("COMSPEC"));
gibt ein Ungültiger Zeiger. Diese ist eine ausführbare Datei für cgi, der COMPSEC ist nicht richtig eingestellt oder übernommen werden, die aus der OS.
Ich habe jetzt festlegen von VERWEISEN, bevor der Prozess gestartet wird und die Verwendung von CreateProcess() wie in Beispiel 2
Jedoch, erstellen Prozess noch immer 0 zurückgeben? Immer näher. Siehe Probleme mit dieser? Danke.
if (! SetEnvironmentVariable("COMSPEC", "C:\\WINDOWS\\system32\\cmd.exe") )
{
printf("SetEnvironmentVariable failed (%d)\n", GetLastError());
}
//r = system("dir c:\\");
r = CreateProcess("dir.exe", NULL, NULL, NULL, TRUE, NULL,
NULL, //inherit parent's environment
NULL, &si, &pi);
EDIT 2
SetEnvironmentVariable() hat nicht funktioniert. Allerdings putenv tut.
_putenv( "COMSPEC=C:\\WINDOWS\\system32\\cmd.exe" ); //C4996
Nicht sicher, was der Unterschied ist...?
Nun, dass das env-var gesetzt ist, wird jede Anfrage auf die cgi-app aus dem browser bietet die option zum speichern der cgi.exe statt es auszuführen.. Nicht sicher, warum sich das geändert hat, basierend auf dieser env-var?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Umgebungsvariablen vererbt werden, wenn Sie einen Prozess ausführen, einschließlich
system(...)
nennen. Es sei denn, es ist etwas seltsam Los ist, in der Regel laufen %windir%\system32\cmd.exe sollte den trick tun, Sie sollten erweitern Sie die Umgebungsvariable, es sei denn, Sie können die API verwenden, um die windows-Verzeichnis 'GetWindowsDirectory'. Siehe hier für ein Beispiel aus der MSDN.Edit: IIRC, COMSPEC-Umgebungsvariable, wenn man auf der Kommandozeile
Du hast eine schlechte Zeiger, denn es ist nicht wahrscheinlich, werden die oben genannten echo-Befehl sollte zeigen, dass, wenn Sie erhalten keine Ausgabe, es ist nicht festgelegt, der rechten Maustaste auf "Mein Computer", klicken Sie mit Links auf "Eigenschaften", die den dialog mit der tab-Seiten angezeigt wird, klicken Sie auf "Erweitert", suchen Sie nach 'Umgebungsvariablen'...siehe die zwei screenshots hier...
Außerdem sollte ich darauf hinweisen, dass Sie die Einstellung der Umgebungsvariable temporär, daher wird es nicht sehen, die 'COMSPEC'....es ist nicht permanent, die einzige dauerhafte Weg, es zu tun ist, Folgen Sie den screenshots...
Ich versuche die screenshots im Ort....
alt-text http://img706.imageshack.us/img706/9434/envvars.png
alt-text http://img638.imageshack.us/img638/5743/comspec.png
Edit#2:
Nur darauf hinweisen, das, wenn Sie die Environment-variable hier, das ist vorübergehend, nicht dauerhaft!
Wenn mit der call
CreateProcess
es zum scheitern verurteilt ist, schauen Sie auf den Kommentar "inherit parent ' s environment", das kann nicht passieren, da die Umgebung eingerichtet wurde, vorübergehend. Haben Sie getestet, die einfachen echo-Befehl hier. Etwas ist falsch, wie, warum die COMSPEC-variable ist nicht gesetzt..nachdem Sie es permanent - Sie müssen den Computer neu starten, damit es funktioniert. Dann den echo Befehl oben sollte zeigen, den Wert für diese variable, und dies wiederumzurückkehren sollte, eine richtige pointer...by die Art und Weise, ich denke, dass sollte
strdup
'd auch...Edit#3: Hoppla, die ich bemerkt, wenn ich hatte '&pi' verwendet, es kam wie ein pi-symbol statt!...naja, das ist jetzt entsprechend geändert...auch das habe ich geändert, diese 'argv' - code hier:
Hoffe, das hilft,
Beste Grüße,
Tom.
Start + Systemsteuerung, System, Erweitert, Umgebungsvariablen. Wählen Sie den Pfad in der Systemvariablen Bearbeiten. Zumindest sollte es so Aussehen:
Fragen, mehr Fragen zu diesem Thema an superuser.com