AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi ShellExecute (und die Function RunProcess von Luckie)
Thema durchsuchen
Ansicht
Themen-Optionen

ShellExecute (und die Function RunProcess von Luckie)

Ein Thema von sahmann · begonnen am 22. Jan 2003 · letzter Beitrag vom 22. Jan 2003
 
sahmann

Registriert seit: 21. Jan 2003
15 Beiträge
 
#2

Re:

  Alt 22. Jan 2003, 15:48
..und nochmal.

Nach einer weiteren genaueren Sichtung des Forumarchivs, bin ich auf

Code:
function WinExec32AndWait(const Cmd: string; const CmdShow: Integer): Cardinal;
var
  sui : TStartupInfo;
  pi : TProcessInformation;
begin
  Result := Cardinal($FFFFFFFF);
  ZeroMemory(@sui,sizeof(TStartupInfo)); sui.cb := SizeOf(TStartupInfo);
                                         sui.dwFlags := STARTF_USESHOWWINDOW;
                                         sui.wShowWindow := CmdShow;

  if(CreateProcess(nil,pchar(Cmd),nil,nil,False,NORMAL_PRIORITY_CLASS,nil,nil,sui,pi)) then
    begin
      WaitForInputIdle(pi.hProcess, INFINITE);
      if(WaitForSingleObject(pi.hProcess, INFINITE) = WAIT_OBJECT_0) then
        begin
          {$IFDEF DELPHI3} 
          if not GetExitCodeProcess(pi.hProcess, Integer(Result)) then
          {$ELSE} 
          if not GetExitCodeProcess(pi.hProcess, Result) then
          {$ENDIF DELPHI3} 
            Result := Cardinal($FFFFFFFF);
        end;
      CloseHandle(pi.hThread);
      CloseHandle(pi.hProcess);
    end;
end;
gestossen. Ist ziemlich ähnlich dem Code von Luckie. Ich habe dann den Aufruf des programms so gemacht:

Code:
var ChildExitCode: Cardinal;
begin
  ChildExitCode := WinExec32AndWait('"C:\Program Files\Borland\Delphi6\Bin\Delphi32.exe"', SW_NORMAL);
  if ChildExitCode = $FFFFFFFF then
     ShowMessage('Delphi 6 konnte nicht gestartet werden.');
end;
Das klappt auch, also er startet die Programme nun alle wie gewuenscht.
Nun passiert aber folgendes. Die Programme die aufgerufen werden, sind Installer (InstallShield, Wise etc), und haengen teilweise einfach (manchmal bei 40% oder 99% der Initialiserung des Installers).
Im Taskmanager sehe ich dann folgende Prozesse:

wowexec.exe
winoldap.mod
setup.exe
_isdel.exe
(diese stehen um ein Leerzeichen versetzt in der Liste !?, bedeutet
wohl das diese Prozesse "haengen")

Wenn ich nun den Prozess "setup.exe" im Taskmanager abschiesse, kommt erstaunlicherweise der ganz normale Setup- Dialog des Programms - die Wartezeit meiner Delphiapplikation ist dann aber wieder abgelaufen, und man kann dort munter weitermachen. Dies ist nicht ganz so tragisch, weil wohl auch nicht vermeidbar, denn die Function die benutzt wird prueft nur auf den einen zu startenden Prozess und nicht weitere Prozesse die gestartet werden.
Aber das Setup sollte schon ganz normal starten. Habe leider keine Idee mehr woran das liegen koennte :/ Vielleicht weil ich Windows XP benutze?

Bin für jede Hilfe von Euch Pro's dankbar

Gruss,
Sascha
  Mit Zitat antworten Zitat
 


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 17:18 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