AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Problem mit "CreateProcess" -> Rückgabewert 4294967295
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit "CreateProcess" -> Rückgabewert 4294967295

Ein Thema von little_budda · begonnen am 6. Feb 2009 · letzter Beitrag vom 6. Feb 2009
Antwort Antwort
Benutzerbild von little_budda
little_budda

Registriert seit: 5. Mai 2006
Ort: Velbert
246 Beiträge
 
Delphi 2006 Professional
 
#1

Problem mit "CreateProcess" -> Rückgabewert 429

  Alt 6. Feb 2009, 11:41
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 ...
  Mit Zitat antworten Zitat
HHennig

Registriert seit: 16. Feb 2007
Ort: Pforzheim
51 Beiträge
 
Delphi 10.3 Rio
 
#2

Re: Problem mit "CreateProcess" -> Rückgabewert

  Alt 6. Feb 2009, 12:02
Hallo,

frage zusätzlich zum Rückgabewert von 'CreateProcess' auch noch LastError ab, da dürfte die Ursache des Fehlschlags drin stehen:
ErrNo := GetLastError;
Hartmut
*
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#3

Re: Problem mit "CreateProcess" -> Rückgabewert

  Alt 6. Feb 2009, 12:10
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
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);
...
  Mit Zitat antworten Zitat
Benutzerbild von little_budda
little_budda

Registriert seit: 5. Mai 2006
Ort: Velbert
246 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Problem mit "CreateProcess" -> Rückgabewert

  Alt 6. Feb 2009, 12:42
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.
Holger
Glück findet sich nicht im Code
Gefahren werden ist nur solange schön wie man selbst nicht lenken möchte ...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz