AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Programm starten und warten bis es beendet wird
Thema durchsuchen
Ansicht
Themen-Optionen

Programm starten und warten bis es beendet wird

Ein Thema von meisteralex · begonnen am 8. Feb 2006 · letzter Beitrag vom 8. Feb 2006
Antwort Antwort
Seite 1 von 2  1 2      
meisteralex

Registriert seit: 22. Nov 2005
173 Beiträge
 
#1

Programm starten und warten bis es beendet wird

  Alt 8. Feb 2006, 08:27
Hi Leute ich habe mehrere Fragen, es eilt ganz dolle, wäre echt geil wenn ihr helfen könntet!

1. Will ich aus einem Delphi Programmheraus ein Winupdate startet
dieses wird mit Start/Ausführen "NDP1.1sp1-KB867460-X86.exe /q:" aufgerufen und muss auch so aus dem Delphi Prog gestartet werden

2. Will ich in Delphi auf die ausführung dieses Programmes warten

3. Ist es Möglich den Programmaufruf "NDP1.1sp1-KB867460-X86.exe /q:" als Parameter zu übergeben ? obwohl dort Leerzeichenvorhanden sind?
Vielen Dank für eure Hilfe !
  Mit Zitat antworten Zitat
dfried

Registriert seit: 16. Aug 2005
486 Beiträge
 
#2

Re: Programm starten und warten bis es beendet wird

  Alt 8. Feb 2006, 08:33
Schau mal hier
  Mit Zitat antworten Zitat
meisteralex

Registriert seit: 22. Nov 2005
173 Beiträge
 
#3

Re: Programm starten und warten bis es beendet wird

  Alt 8. Feb 2006, 08:37
thx, werds gleich mal proggen

hast du auch eine idee zu der parameterübergabe ?
  Mit Zitat antworten Zitat
dfried

Registriert seit: 16. Aug 2005
486 Beiträge
 
#4

Re: Programm starten und warten bis es beendet wird

  Alt 8. Feb 2006, 09:08
Zitat von meisteralex:
hast du auch eine idee zu der parameterübergabe ?
Schau dir mal die in dem Beispiel verwendet Funktion "CreateProcess" in der Hilfe mal an, dort gibt es auch noch diverse andere Paameter, evtl. musst du die "RunProcess" Funktion halt noch etwas umbasteln.
  Mit Zitat antworten Zitat
meisteralex

Registriert seit: 22. Nov 2005
173 Beiträge
 
#5

Re: Programm starten und warten bis es beendet wird

  Alt 8. Feb 2006, 09:52
jo klappt alles soweit nur habe ich ein problem

so lange das programm läuft (er also auf die beendung des programmes wartet) hängt mein hauptprogramm
gibt es irgendne möglichkeit, da nen application.processmessages einzubauen, damit ich mein hauptprogramm weiterbenutzen kann?
  Mit Zitat antworten Zitat
dfried

Registriert seit: 16. Aug 2005
486 Beiträge
 
#6

Re: Programm starten und warten bis es beendet wird

  Alt 8. Feb 2006, 09:56
Dann musst du das Starten des Programms am besten in einen separaten Thread verpacken, dann bleibt eine eigentliche Applikation "bedienbar".
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.767 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Programm starten und warten bis es beendet wird

  Alt 8. Feb 2006, 09:56
Hallo,

ich benutze für solche Sachen immer diese Funktion:

Delphi-Quellcode:
{ WindowState is one of the SW_xxx constants.
  Look up ShowWindow in the API help for a list.}

function ExecAndWait(const Filename, Params: string;
                     WindowState: word): boolean;
{$IFDEF WIN32}
var
  SUInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  CmdLine: string;
begin
  { Enclose filename in quotes to take care of
    long filenames with spaces. }

  CmdLine := '"' + Filename + '" ' + Params;
  FillChar(SUInfo, SizeOf(SUInfo), #0);
  with SUInfo do begin
    cb := SizeOf(SUInfo);
    dwFlags := STARTF_USESHOWWINDOW;
    wShowWindow := WindowState;
  end;
  try
    Result := CreateProcess(NIL, PChar(CmdLine), NIL, NIL, FALSE,
                            CREATE_NEW_CONSOLE or
                            NORMAL_PRIORITY_CLASS, NIL,
                            PChar(ExtractFilePath(Filename)),
                            SUInfo, ProcInfo);
  except
    on E: Exception do
      begin
        Result:=false;
      end;
  end;

  { Wait for it to finish. }
  if Result then
    WaitForSingleObject(ProcInfo.hProcess, INFINITE);

{$ELSE}
var
  InstanceID : THandle;
  Buff: array[0..255] of char;
begin
  StrPCopy(Buff, Filename + ' ' + Params);
  InstanceID := WinExec(Buff, WindowState);
  if InstanceID < 32 then
  { a value less than 32 indicates an Exec error }
    Result := FALSE
  else begin
    Result := TRUE;
    repeat
      Application.ProcessMessages;
    until Application.Terminated or
          (GetModuleUsage(InstanceID) = 0);
  end;
{$ENDIF}
end;
Vielleicht kannst Du sie ja nach Deinen Anforderungen umbauen.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
meisteralex

Registriert seit: 22. Nov 2005
173 Beiträge
 
#8

Re: Programm starten und warten bis es beendet wird

  Alt 8. Feb 2006, 10:12
hmm was ist das denn fürn komisch quellcode ?
  Mit Zitat antworten Zitat
dfried

Registriert seit: 16. Aug 2005
486 Beiträge
 
#9

Re: Programm starten und warten bis es beendet wird

  Alt 8. Feb 2006, 10:18
@meisteralex: Ich hab den Quelltext von Klausi01 mal noch etwas umgebaut (dann verstehst du Ihn wahrscheinlich besser) und auch schon ein "Application.Processmessages" mit reingemacht. Damit sollte es funktionieren!

Delphi-Quellcode:
{ WindowState is one of the SW_xxx constants.
  Look up ShowWindow in the API help for a list.}

function ExecAndWait(const Filename, Params: string;
                     WindowState: word): boolean;
var
  SUInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  CmdLine: string;
begin
  { Enclose filename in quotes to take care of
    long filenames with spaces. }

  CmdLine := '"' + Filename + '" ' + Params;
  FillChar(SUInfo, SizeOf(SUInfo), #0);
  with SUInfo do begin
    cb := SizeOf(SUInfo);
    dwFlags := STARTF_USESHOWWINDOW;
    wShowWindow := WindowState;
  end;
  try
    Result := CreateProcess(NIL, PChar(CmdLine), NIL, NIL, FALSE,
                            CREATE_NEW_CONSOLE or
                            NORMAL_PRIORITY_CLASS, NIL,
                            PChar(ExtractFilePath(Filename)),
                            SUInfo, ProcInfo);
  except
    on E: Exception do
      begin
        Result:=false;
      end;
  end;

  { Wait for it to finish. }
  if Result then begin
    Application.Processmessages; // <-- diese Zeile hab ich eingefügt!!!
    WaitForSingleObject(ProcInfo.hProcess, INFINITE);
  end;

end;
  Mit Zitat antworten Zitat
meisteralex

Registriert seit: 22. Nov 2005
173 Beiträge
 
#10

Re: Programm starten und warten bis es beendet wird

  Alt 8. Feb 2006, 10:23
friert trotzdem ein
das einfrieren liegt ja an
WaitForSingleObject
und ein application.processmessages davor bringt ja dann auch net viel
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 00:01 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