Programm beenden - wie?

Programm beenden - wie?

Mit der folgenden Prozedur kann der User, während mein Programm läuft, ggf. eine neue Programmversion herunterladen; dazu muss das Programm selbst aber zunächst beendet werden.

Mit

Form2.Close; (= die Info-Form mit dem Download-Link zur Setup-Datei)
Form1.Close; (= das Hauptprogramm, aus dem Form2 aufgerufen wird (form2.showmodal:wink:)

geht das aber nicht.

Wie macht man’s richtig?

Gruß

J. Schlör

procedure TForm2.BitBtn2Click(Sender: TObject);  
var hpitadresse: string;  
begin  
 if MessageDlg('Vor der Installation einer neuen Version musst du die alte Version de-installieren (s. Deinstallation-Routine in PROGRAMME/...)!' + #10#13 + 'Bitte schließe nach dem Download die Homepage Maschine und de-installiere sie; danach kannst du die neue Version installieren..',  
 mtConfirmation, [mbNO,mbOK], 0) = mrno then  
 exit  
 else  
 begin  
 Form2.Close;  
 Form1.Close;  
 hpitadresse := '..\download\meinprogrammsetup.exe';  
 try  
 ShellExecute(Application.Handle, 'open', PCHar(hpitadresse), nil, nil, SW\_ShowNormal);  
 except  
 begin  
 Application.MessageBox(PChar('Der Start des Browsers ist leider fehlgeschlagen.'),'Fehler',0+16);  
 end;  
 end;  
 end;  
end;  
  

Programm beenden - wie?

Mit der folgenden Prozedur kann der User, während mein
Programm läuft, ggf. eine neue Programmversion herunterladen;
dazu muss das Programm selbst aber zunächst beendet werden.

Hallo,

erstens, wieso eigentlich? Wenn nur eine Installationsdatei heruntergeladen wird, besteht ja noch keine Notwendigkeit, das Programm zu beenden, erst wenn die Installation gestartet werden soll.

zweitens, wenn schon, dann muss das Programm zum Download eben ein eigenes Programm (exe) sein, ein Programm kann logischerweise nicht etwas tun und gleichzeitig beendet werden.

Gruss Reinhard

Hallo J. Schlör,

das verstehe ich jetzt nicht.
Dein Programm verlangt doch, dass der Benutzer die alte Version deinstalliert.
Wenn du eine automatische Deinstallation / Instalation willst, dann schreibe ein Hilfsprogramm, welches nach dem Download gestartet wird.
Dann kann sich dein Programm selbst beenden. Das Hilfsprogramm deinstalliert, insatalliert, startet dein Programm und beendet sich selbst. Fertig.

Manfred

Programm beenden - wie?

Mit der folgenden Prozedur kann der User, während mein
Programm läuft, ggf. eine neue Programmversion herunterladen;
dazu muss das Programm selbst aber zunächst beendet werden.

Mit

Form2.Close; (= die Info-Form mit dem Download-Link zur
Setup-Datei)
Form1.Close; (= das Hauptprogramm, aus dem Form2 aufgerufen
wird (form2.showmodal:wink:)

geht das aber nicht.

Wie macht man’s richtig?

Gruß

J. Schlör

Hallo,

Beim Aufrufen von „ShellExecute()“ muß das Application.Handle mit gegeben werden. Das verursacht, dass die Mainform (Application) auf das SUB-Prozess oder die Child-Form (und/oder die zusynchronisierende Form) warten muß. Wenn die Form geclosed ist, dann ist das Habdle quasi NIL. Also es kann meiner Meinung nach nicht funzt.

Wenn du dein Programm nicht viel ändern will, würde ich empfehlen, dass du die Procedure WINEXEC oder createProcess zunächst aufrufen und dann die Form´s schliessen.
Gruß
K. Le

Danke für die Tipps! Hab’s so gemacht und ein kleines Extra-Programm geschrieben, das den Download übernimmt.

Gruß

J. Schloer