Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Programm ohne Umwege beenden (https://www.delphipraxis.net/143501-programm-ohne-umwege-beenden.html)

Shubit 17. Nov 2009 09:39


Programm ohne Umwege beenden
 
Hi,
ich möchte mein Programm während des Starten unter bestimmten gerne umgehend beenden. Also eigentlich Application.terminate. Allerdings scheint dass nicht sofort zu wirken, sondern lässt den OnFormCreate Prozess weiterlaufen und auch die OnFormDestroy Procedure (und dadurch natürlich auch noch OnFormResize^^) nimmt es noch nicht. Gibt es da einen Weg das alles zu umgehen?
Kann ich nicht einfach meinen Prozess selbst abschießen?

Luckie 17. Nov 2009 09:41

Re: Programm ohne Umwege beenden
 
Warum startest du ihn denn erst, wenn er nicht starten soll?

Progman 17. Nov 2009 09:46

Re: Programm ohne Umwege beenden
 
Der Befehl "Halt()" beendet sofort, denk ich.

dataspider 17. Nov 2009 09:52

Re: Programm ohne Umwege beenden
 
Hi,

Man kann es IMHO vor Erzeugung des Hauptformulares beenden:

Delphi-Quellcode:
begin

  Application.Initialize;

  if ProgrammAbbruch then
  begin
    Application.ProcessMessages; // Achtung, sonst Exception, wird nicht ganz fertig
    Application.Terminate;
  end
  else
  begin
    Application.CreateForm(TFRMMain, FRMMain);
    Application.Run;
  end;

end.
So mache ich es mit den LoginDialog...

Frank

himitsu 17. Nov 2009 10:58

Re: Programm ohne Umwege beenden
 
Auch wenn HALT sofort wirkt, so entspricht dieses in etwas dem, als wenn man das Programm über den Taskanager einfach abschießen würde
und dieses ist nunmal nicht unbedingt ein idealer Weg.

Also, wie Luckie und Co. schon sagten:
Wenn etwas nicht gemacht werden soll, dann fang erst garnicht damit an.
(das gilt besonders für Programmabbruchbedingungen, welche viele in OnCreate der Form einbauen ... da ist man ja schon mitten im Starten)
Delphi-Quellcode:
begin
  if not ProgrammAbbruch then
  begin
    Application.Initialize;
    Application.CreateForm(TFRMMain, FRMMain);
    Application.Run;
  end;
end.

Shubit 17. Nov 2009 13:37

Re: Programm ohne Umwege beenden
 
kann ich an der Stelle ProgrammAbbruch auch auf Funktion des zu erstellenden Formulars zugreifen und einen ProgressDialog für einen Download anzeigen?

DeddyH 17. Nov 2009 13:39

Re: Programm ohne Umwege beenden
 
Du willst auf etwas zugreifen, was es noch gar nicht gibt? Irgendwie kann ich Deinen Gedankengängen nicht folgen.

Luckie 17. Nov 2009 14:21

Re: Programm ohne Umwege beenden
 
Zitat:

Zitat von DeddyH
Du willst auf etwas zugreifen, was es noch gar nicht gibt? Irgendwie kann ich Deinen Gedankengängen nicht folgen.

Ich hatte schon Probleme nur seinen Satz zu verstehen. ;)

Shubit 17. Nov 2009 15:09

Re: Programm ohne Umwege beenden
 
Ich versuch mal mein Problem genauer zu erklären:
Also ich habe ein kleines einfaches Programm und hab da jetzt just for fun eine Update Funktion eingebaut.
Die Updatefunktion funktioniert wie folgt:
1. falls vorhanden neue exe Datei downloaden
2. eine bat-Datei schreiben/starten und das Programm beenden
3. bat-Datei überschreibt exe Datei mit neuer exe Datei und startet dieses
-> funktioniert so weit

Nun würd ich gern beim Programmstart diese Funktion aufrufen, falls der Bool AutoUpdate in der ini Datei auf falls steht.
Für den Fall den Fall das AutoUpdate auf false steht, soll er normal starten.
Steht AutoUpdate auf true, wird wie gesagt die Update Funktion aufgerufen. Falls sie keine Updates findet, kann das Programm ebenfalls normal starten. Sind Updates vorhanden, sollen die Update Funktion diese wie oben genannt runterladen, das Programm beenden bzw. garnicht erst starten.

Nun die Frage wie macht man das ordentlich?

Kann ich das alles einfach in den Quelltext vom Projekt hauen?

Delphi-Quellcode:
var ini: TIniFile;
begin
  ini := TIniFile.Create(Path + '\settings.ini');
  if ini.ReadBool('Settings','AutoUpdate',false) then
    if FindUpdates then
      if DownloadUpdates then
        Exit;
  ini.free;
  Application.Initialize;
  Application.CreateForm(TFRMMain, FRMMain);
  Application.Run;
end.
function FindUpdates: Boolean
=> gibt true zurück wenn es eine aktuellere Version gibt

function DownloadUpdates: Boolean
=> gibt true zurück wenn Download erfolgreich war

Und wo müsste ich jetzt die Funktion FindUpdates und DownloadUpdates deklarieren?

p80286 17. Nov 2009 15:30

Re: Programm ohne Umwege beenden
 
Zitat:

Zitat von Shubit
Ich versuch mal mein Problem genauer zu erklären:
Also ich habe ein kleines einfaches Programm und hab da jetzt just for fun eine Update Funktion eingebaut.
Die Updatefunktion funktioniert wie folgt:
1. falls vorhanden neue exe Datei downloaden
2. eine bat-Datei schreiben/starten und das Programm beenden
3. bat-Datei überschreibt exe Datei mit neuer exe Datei und startet dieses
-> funktioniert so weit

.....
Und wo müsste ich jetzt die Funktion FindUpdates und DownloadUpdates deklarieren?

Na da wo es Dir in den Kram passt! (ich würde es in eine eigene Unit auslagern, ggf. ein Updateobject daraus machen)
Du hast doch recht ordentlich beschrieben wie Du nach Updates suchst und sie ggf. installieren willst.
Ich würde es so machen, daß Du mit zwei .BAT oder .CMD Dateien arbeitest. Eine die den "normalen" Programmaufruf und den Updateaufruf enthält. Wenn's keine Updates gibt steht in der Update.Bat nur ein REM oder sonst ein Platzhalter. Gibt es ein Update, dann werden in die Update.Bat alle notwendigen Befehle eingetragen und am Schluß wird Dein Programm wieder aufgerufen (nicht vergessen die Update.Bat wieder zu leeren). Das war's.

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:19 Uhr.
Seite 1 von 2  1 2      

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