AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi ShellExecute - Warten bis Prog beendet wird funzt nicht
Thema durchsuchen
Ansicht
Themen-Optionen

ShellExecute - Warten bis Prog beendet wird funzt nicht

Ein Thema von Tyler · begonnen am 27. Dez 2004 · letzter Beitrag vom 27. Dez 2004
Antwort Antwort
Benutzerbild von Tyler
Tyler

Registriert seit: 19. Jun 2003
Ort: Berlin
241 Beiträge
 
#1

ShellExecute - Warten bis Prog beendet wird funzt nicht

  Alt 27. Dez 2004, 16:35
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
  Mit Zitat antworten Zitat
perle

Registriert seit: 8. Apr 2004
183 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: ShellExecute - Warten bis Prog beendet wird funzt nicht

  Alt 27. Dez 2004, 17:07
Zitat:
exitCode := WaitForSingleObject(Info.hProcess, 500);
vielleicht weil der timeout von 500 schon vorher erreicht wird?

versuchs mal mit INFINITE statt 500
  Mit Zitat antworten Zitat
Benutzerbild von Tyler
Tyler

Registriert seit: 19. Jun 2003
Ort: Berlin
241 Beiträge
 
#3

Re: ShellExecute - Warten bis Prog beendet wird funzt nicht

  Alt 27. Dez 2004, 17:25
hm, danke, hab ich probiert, hat leider nicht geholfen
  Mit Zitat antworten Zitat
Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#4

Re: ShellExecute - Warten bis Prog beendet wird funzt nicht

  Alt 27. Dez 2004, 17:30
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
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
Benutzerbild von Tyler
Tyler

Registriert seit: 19. Jun 2003
Ort: Berlin
241 Beiträge
 
#5

Re: ShellExecute - Warten bis Prog beendet wird funzt nicht

  Alt 27. Dez 2004, 17:46
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
  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 23:41 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