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 ShellExecuteEx öffnet, beendet aber auch (https://www.delphipraxis.net/42162-shellexecuteex-oeffnet-beendet-aber-auch.html)

kallculator 14. Mär 2005 19:12


ShellExecuteEx öffnet, beendet aber auch
 
Hallo!

Leider habe ich ein kleines Problem. Mit folgendem Code soll Apache versteckt geöffnet werden und sobald er fertig geladen ist, der IE starten (der wiederum eine Seite vom Webserver aufruft). Beide Programme starten auch, nur schließt sich der Apache wieder bevor der IE anspringt. Was könnte da falsch laufen? Der Apache sollte im Hintergrund weiterlaufen.

Delphi-Quellcode:
var
  ShExecInfo : SHELLEXECUTEINFO;
begin
  ShExecInfo.cbSize := sizeof(SHELLEXECUTEINFO);
  ShExecInfo.fMask := SEE_MASK_NOCLOSEPROCESS;
  ShExecInfo.lpVerb := nil;
  ShExecInfo.lpFile := PChar('...\apache\bin\Apache.exe');
  ShExecInfo.lpDirectory := nil;
  ShExecInfo.nShow := SW_HIDE;

  ShellExecuteEx(@ShExecInfo);

  WaitForSingleObject(ShExecInfo.hProcess,INFINITE);

  ShellExecute(0,'open',PCHar('...\Internet Explorer\iexplore.exe'),nil,nil,SW_MAXIMIZE);
end;

Dax 14. Mär 2005 19:15

Re: ShellExecuteEx öffnet, beendet aber auch
 
Mit WaitForSingleObject(...) wartest du, soweit ich weiß, bis der Apache wieder beendet wird. Vielleicht solltest du einen anderen Timeout einstellen und prüfen, obs dann funktioniert.

Christian Seehase 14. Mär 2005 19:38

Re: ShellExecuteEx öffnet, beendet aber auch
 
Moin kallculator,

nimm doch statt MSDN-Library durchsuchenWaitForSingleObject lieber MSDN-Library durchsuchenWaitForInputIdle.

kallculator 14. Mär 2005 20:06

Re: ShellExecuteEx öffnet, beendet aber auch
 
Zitat:

Zitat von Christian Seehase
nimm doch statt MSDN-Library durchsuchenWaitForSingleObject lieber MSDN-Library durchsuchenWaitForInputIdle.

Danke euch beiden für die schnellen Antworten.
WaitForInputIdle ist die richtige Wahl, habe es auch ausprobiert, nur irgendwie passiert dasselbe :?
Was nun?

jim_raynor 14. Mär 2005 20:42

Re: ShellExecuteEx öffnet, beendet aber auch
 
Würde sagen, dass du auch ein Directory (lpDirectory) angeben solltest. Denke mal, dass beim Starten von Apache irgendein Fehler auftritt und dadurch beendet wird. Musst mal in den Logfiles schauen.

kallculator 14. Mär 2005 22:34

Re: ShellExecuteEx öffnet, beendet aber auch
 
Hilft leider auch nichts und Apache logt keine Error :(

Edit:
Du hast mich doch auf die richtige Spur gebracht. Apache brauchte (auch noch) lpParameters :)
Jetzt gehts!

Hier der ausgebesserte Code:
Delphi-Quellcode:
var
  ShExecInfo : SHELLEXECUTEINFO;
begin
  ShExecInfo.cbSize := sizeof(SHELLEXECUTEINFO);
  ShExecInfo.fMask := SEE_MASK_NOCLOSEPROCESS;
  ShExecInfo.lpVerb := nil;
  ShExecInfo.lpFile := PChar('...\bin\Apache.exe');
  ShExecInfo.lpParameters := '';
  ShExecInfo.lpDirectory := PChar('...\bin');
  ShExecInfo.nShow := SW_HIDE;
  ShellExecuteEx(@ShExecInfo);
  WaitForInputIdle(ShExecInfo.hProcess,INFINITE);
  ShellExecute(0,'open',PCHar('...\Internet Explorer\iexplore.exe'),nil,nil,SW_MAXIMIZE);
end;

sh17 29. Sep 2006 08:51

Re: ShellExecuteEx öffnet, beendet aber auch
 
Vielleicht noch als abschliessende Ergänzung:

Delphi-Quellcode:
CloseHandle(ShExecInfo.hProcess);


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