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:
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;
Der Aufruf lautet:
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);
...
Wenn ich den Aufruf händisch über die Shell mache, klappt das.
Kann ich den Aufruf noch irgendwie anders gestalten?
Gruß Holger.
Holger
Glück findet sich nicht im Code
Gefahren werden ist nur solange schön wie man selbst nicht lenken möchte ...