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 ShellExecute - Warten bis Prog beendet wird funzt nicht (https://www.delphipraxis.net/36880-shellexecute-warten-bis-prog-beendet-wird-funzt-nicht.html)

Tyler 27. Dez 2004 16:35


ShellExecute - Warten bis Prog beendet wird funzt nicht
 
Hallo,

folgenden Code, zu Teilen aus folgendem Beitrag zusammengebastelt:
http://www.delphipraxis.net/internal...%FChren+warten

funktioniert leider nicht, und zwar wird die FOR-TO-Schleife bis zum Ende durchgelaufen, und nicht auf den Abschluss des Programms gewartet:

Delphi-Quellcode:
procedure Tf_main.bt_startClick(Sender: TObject);
var
  i : Integer;
  Info: TShellExecuteInfo;
  pInfo: PShellExecuteInfo;
  exitCode: DWord;
begin
  for i := 0 to inst_Prog - 1 do
  begin


  pInfo := @Info;
  with Info do
  begin
    cbSize := SizeOf(Info);
    fMask := SEE_MASK_NOCLOSEPROCESS;
    wnd   := Application.Handle;
    lpVerb := NIL;
    lpFile := PChar(lab_ProgExe[i].Caption);
    {Parametros al ejecutable} 
    {Executable parameters}
    lpParameters := PChar(lab_ProgParam[i].Caption + #0);
    lpDirectory := PChar(lab_ProgPfad[i].Caption);
    nShow       := 1;
    hInstApp    := 0;
  end;
  ShellExecuteEx(pInfo);

  repeat
    exitCode := WaitForSingleObject(Info.hProcess, 500);
    Application.ProcessMessages;
  until (exitCode <> WAIT_TIMEOUT);
  end;
Jemand ne Idee, woran das liegen kann?

Danke im Vorraus


tyler

perle 27. Dez 2004 17:07

Re: ShellExecute - Warten bis Prog beendet wird funzt nicht
 
Zitat:

exitCode := WaitForSingleObject(Info.hProcess, 500);
vielleicht weil der timeout von 500 schon vorher erreicht wird?

versuchs mal mit INFINITE statt 500

Tyler 27. Dez 2004 17:25

Re: ShellExecute - Warten bis Prog beendet wird funzt nicht
 
hm, danke, hab ich probiert, hat leider nicht geholfen :(

arbu man 27. Dez 2004 17:30

Re: ShellExecute - Warten bis Prog beendet wird funzt nicht
 
Delphi-Quellcode:
function Starte(verz, appname: string): boolean;
var StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
begin
  if verz[length(verz)]<>'\' then verz:=verz+'\';
  FillChar(StartupInfo, SizeOf(TStartupInfo),0);
  StartupInfo.cb:=SizeOf(TStartupInfo);
  if CreateProcess(nil, PChar(verz+appname), nil, nil, false,
  NORMAL_PRIORITY_CLASS, nil, nil, startupinfo, ProcessInfo) then begin
    try
      WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
    finally
      CloseHandle(ProcessInfo.hProcess);
      CloseHandle(ProcessInfo.hThread);
    end;
    result:=true;
  end
  else
    result:=false;
end;
Dieser Code von Delphi Source funktioiert

Tyler 27. Dez 2004 17:46

Re: ShellExecute - Warten bis Prog beendet wird funzt nicht
 
Danke für den unteren Code! Er funktinioniert ja auch grundsätzlich, nur leider nicht, sobald ich Paramter mit übergeben möchte:

Delphi-Quellcode:
  if CreateProcess(nil, PChar(verz+appname), nil, nil, false,
  NORMAL_PRIORITY_CLASS, nil, nil, startupinfo, ProcessInfo) then begin
hab ich ersetzt durch (Parameter hinzugefügt) - natürlich nach entsprechender Änderung des Funktionskopfes

Delphi-Quellcode:
  if CreateProcess(nil, PChar(verz+appname+' '+parameter), nil, nil, false,
  NORMAL_PRIORITY_CLASS, nil, nil, startupinfo, ProcessInfo) then begin
Wenn ich das so ausführe, wird die o.g. FOR-TO-Schleife wieder bis zum Ende durchgelaufen (Zur Info, das Programm, welches u.a. gestartet wird, ist eine "Silent"-Installation von WinRAR... vielleicht liegts ja daran?)

tyler


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:55 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