Was soll COMSPEC-und PATH-Umgebungsvariablen werden, 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?
InformationsquelleAutor T.T.T. | 2010-02-16
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.
Bei der Suche nach VERWEISEN in System() ist es nicht gefunden, auch wenn nur vor dem Satz. Ich denke, das wird eine cgi-Anwendung ist, wirft etwas aus....
Beispiel 2 hier (msdn.microsoft.com/en-us/library/ms682009%28VS.85%29.aspx) setzt den Wert für die child-Prozesse Erben diese Weise, das ist der Grund, warum ich das Tat. Auch wenn es nur vorübergehend ist, sollte nicht der Kindprozess erbt die übergeordnete env während seines Lebens? Sehen lpEnvironment (msdn.microsoft.com/en-us/library/ms682425%28VS.85%29.aspx), soweit die Einstellung der var permanent, wenn ich zu meinen windows-Einstellungen sehe ich es Weg cmd.exe ist das dauerhaft?
, die dauerhaft in den windows-Einstellungen...aber Zitat aus MSDN " Jeder Prozess hat eine Umgebung, block zugeordnet.', also warum die Vervielfältigung überhaupt? Seltsam....und ja, in der Theorie, wird der Kind-Prozess erbt die übergeordnete env, aber die Großeltern env wäre die systemweite Einstellung...verstanden???
hab den echo-Befehl funktioniert für Sie ja?
InformationsquelleAutor t0mm13b
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
InformationsquelleAutor Hans Passant