![]() |
Problem mit "CreateProcess" -> Rückgabewert 429
Hallo,
ich wollte den folgenden Code nutzen um eine externe Applikation auszuführen. (Die Anwendung verschlüsselt ein XML File) Klappt nur leider nicht (System: XP-Pro, SP3) Der Rückgabewert von "RunProcess" ist immer 4294967295 (entspricht: 0xFFFFFFFF -> -1 -> WAIT_FAILED)
Delphi-Quellcode:
Der Aufruf lautet:
function RunProcess(FileName: string; ShowCmd: DWORD; wait: Boolean; ProcID: PCardinal): Longword;
var StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation; begin FillChar(StartupInfo, SizeOf(StartupInfo), #0); StartupInfo.cb := SizeOf(StartupInfo); StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK; StartupInfo.wShowWindow := ShowCmd; if not CreateProcess(nil, @Filename[1], nil, nil, False, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then Result := WAIT_FAILED else begin if wait = FALSE then begin if ProcID <> nil then ProcID^ := ProcessInfo.dwProcessId; exit; end; WaitForSingleObject(ProcessInfo.hProcess, INFINITE); GetExitCodeProcess(ProcessInfo.hProcess, Result); end; if ProcessInfo.hProcess <> 0 then CloseHandle(ProcessInfo.hProcess); if ProcessInfo.hThread <> 0 then CloseHandle(ProcessInfo.hThread); end;
Delphi-Quellcode:
Wenn ich den Aufruf händisch über die Shell mache, klappt das.... sExecuteLine := sCryptApp + ' ' + sConfwareXmlFile; // sConfwareXmlFile = D:\Dokumente und Einstellungen\user\Lokale Einstellungen\Anwendungsdaten\XIL_TOOL\1708-482405-001_V.xml // sCryptApp = D:\Dokumente und Einstellungen\user\Lokale Einstellungen\Anwendungsdaten\XIL_TOOL\Xil_Tool_Crypter.exe lwResult := RunProcess(sExecuteLine, SW_MAXIMIZE, TRUE, @ProcID); ... Kann ich den Aufruf noch irgendwie anders gestalten? Gruß Holger. :gruebel: |
Re: Problem mit "CreateProcess" -> Rückgabewert
Hallo,
frage zusätzlich zum Rückgabewert von 'CreateProcess' auch noch LastError ab, da dürfte die Ursache des Fehlschlags drin stehen: ErrNo := GetLastError; |
Re: Problem mit "CreateProcess" -> Rückgabewert
Hallo,
der Rückgabewert Deiner Funktion ist nicht immer definiert, daher fehlt Dir die Möglichkeit, zwischen unterschiedlichen Fehlern zu unterscheiden. (Okay, sehe gerade, Du hast die Funktion hier aus dem Forum ( ![]() Lass Dir mal die letzte Fehlermeldung mit
Delphi-Quellcode:
ausgeben. Dazu änderst Du die Funktion von
ShowMessage(SysErrorMessage(GetLastError));
Delphi-Quellcode:
in
then
Result := WAIT_FAILED
Delphi-Quellcode:
Eine mögliche Fehlerursache könnten die von Dir benutzten Pfade sein, da sie Leerzeichen enthalten. Bitte setze die Pfadangaben mal in doppelte Hochkommata.
then
begin Result := WAIT_FAILED; ShowMessage(SysErrorMessage(GetLastError)); end;
Delphi-Quellcode:
...
sExecuteLine := sCryptApp + ' ' + sConfwareXmlFile; // sConfwareXmlFile = "D:\Dokumente und Einstellungen\user\Lokale Einstellungen\Anwendungsdaten\XIL_TOOL\1708-482405-001_V.xml" // sCryptApp = "D:\Dokumente und Einstellungen\user\Lokale Einstellungen\Anwendungsdaten\XIL_TOOL\Xil_Tool_Crypter.exe" lwResult := RunProcess(sExecuteLine, SW_MAXIMIZE, TRUE, @ProcID); ... |
Re: Problem mit "CreateProcess" -> Rückgabewert
Die Idee mit GetLast Error war klasse.
Das System hat die Anwendung nicht finden können. Die Lösung mit den doppelte Hochkommas hat es dann gelöst. Klappt jetzt. Hier noch der geändert Aufruf
Delphi-Quellcode:
Danke.
...
sExecuteLine := '"' + sCryptApp + '" ' + sConfwareXmlFile; lwResult := RunProcess(sExecuteLine, SW_MAXIMIZE, TRUE, @ProcID); ... :-D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz