Ich möchte eine TEST.exe in einem C-Programm ausführen. Während ich verwendesystem() und CreateProcess()/CreateProcessW()
system("TEST.exe <input-file> output-file");
kann ich bekommen, was ich erwartet habe.
Aber CreateProcessW() nicht richtig funktionieren, wenn ich den folgenden Code verwenden (siehe How do I run an external program?):
if (CreateProcessW(const_cast<LPCWSTR>(FullPathToExe.c_str()),
pwszParam, 0, 0, false,
CREATE_DEFAULT_ERROR_MODE, 0, 0,
&siStartupInfo, &piProcessInfo) != false)
{
/* Watch the process. */
dwExitCode = WaitForSingleObject(piProcessInfo.hProcess, (SecondsToWait * 1000));
iReturnVal = GetLastError();
}
else
{
/* CreateProcess failed */
iReturnVal = GetLastError();
}
wo
FullPathToExe="TEST.exe", pwszParam="TEST.exe <input-file> output-file".
und WaitForSingleObject() liefert 258, GetLastError() zurückkehrt 1813 ("Der angegebene Ressourcentyp kann nicht in der Image-Datei gefunden werden.").
Auch Die obige CreateProcessW() Code funktioniert gut, wenn ich meine eigenen HelloProcess.exe laufen (Druck hallo, und einige Sekunden durch die folgende Nummer, dann die Ausfahrt bestimmt schlafen.) Mit
FullPathToExe="HelloProcess.exe", pwszParam="HelloProcess.exe 10".
Irgendwelche Ideen ? Danke für Hinweise!
Ist FullPathToExe eine Zeichenfolge oder ein Wstring? – zdan
Es ist ein Wstring. Ich denke, die Arten von Variablen sind in Ordnung, da der Code gut mit meiner eigenen * .exe läuft. Ich frage mich, ob es ein Problem mit der "<"/">" in den Parametern gibt? – dehiker
Titel sollte geändert werden in "Eingabe/Ausgabe-Umleitung: System() vs. CreateProcess()", aber ich darf es nicht bearbeiten. Außerdem ist der Abstand in " output-file" inkonsequent - und somit irreführend -. Zeichen '<>' sind Präfixe, aber der Abstand zwischen OP bedeutet, dass es sich um Klammern handelt. Abstand, der nicht irreführend wäre: ' input-file'. –
7vujy0f0hy