Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Problem mit "CreateProcess" -> Rückgabewert 4294967295 (https://www.delphipraxis.net/128801-problem-mit-createprocess-rueckgabewert-4294967295-a.html)

little_budda 6. Feb 2009 11:41


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:
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.

:gruebel:

HHennig 6. Feb 2009 12:02

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;

nahpets 6. Feb 2009 12:10

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 (post7494.html#7494))

Lass Dir mal die letzte Fehlermeldung mit
Delphi-Quellcode:
ShowMessage(SysErrorMessage(GetLastError));
ausgeben. Dazu änderst Du die Funktion von
Delphi-Quellcode:
then
  Result := WAIT_FAILED
in
Delphi-Quellcode:
then
begin
  Result := WAIT_FAILED;
  ShowMessage(SysErrorMessage(GetLastError));
end;
Eine mögliche Fehlerursache könnten die von Dir benutzten Pfade sein, da sie Leerzeichen enthalten. Bitte setze die Pfadangaben mal in doppelte Hochkommata.
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);
...

little_budda 6. Feb 2009 12:42

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:
...
  sExecuteLine := '"' + sCryptApp + '" ' + sConfwareXmlFile;
  lwResult := RunProcess(sExecuteLine, SW_MAXIMIZE, TRUE, @ProcID);
...
Danke.
:-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