AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Event beim Schließen / "Abschiessen" des Programms
Thema durchsuchen
Ansicht
Themen-Optionen

Event beim Schließen / "Abschiessen" des Programms

Ein Thema von KahPee · begonnen am 3. Okt 2010 · letzter Beitrag vom 3. Okt 2010
Antwort Antwort
Benutzerbild von KahPee
KahPee

Registriert seit: 12. Mai 2009
214 Beiträge
 
Turbo Delphi für Win32
 
#1

Event beim Schließen / "Abschiessen" des Programms

  Alt 3. Okt 2010, 01:40
Hallo,

ich suche ein Event das ausgelöst wird beim Schließen des Programms. Es soll zu dem zeitpunkt ein wert in einer bestimmten Datei geändert werden, der anzeigt, dass das Programm nicht mehr läuft. Wenn alles planmäßig läuft kann ich das im OnClose machen. Wie fange ich jetzt aber die Möglichkeit ab, dass sich das Programm aufhängt (warum auch immer) und das OnCLose nicht ausgelöst wird (z.B. Beenden mit dem Taskmanager/Prozess beenden)..

Vielen Dank

KahPee
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Event beim Schließen / "Abschiessen" des Programms

  Alt 3. Okt 2010, 02:24
In der .dpr

Delphi-Quellcode:
Begin
  ...
  Application.Run;
  // Hier ist der EndOfApplicationEvent
end.
Wenn das Programm abgeschossen wird ... Das kann man nicht abfangen

BTW OnClose wird nicht nur beim Beenden der Application aufgerufen.

Eine weitere Möglichkeit ist es auch eine Unit zu schreiben und im initialization und finalization Teil dieses zu handeln.
Das ist eigentlich am elegantesten.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo ( 3. Okt 2010 um 02:27 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Björn Ole
Björn Ole

Registriert seit: 10. Jul 2008
166 Beiträge
 
Delphi XE Professional
 
#3

AW: Event beim Schließen / "Abschiessen" des Programms

  Alt 3. Okt 2010, 02:33
Falls du das Abschießen irgendwie mitbekommen willst, könntest du über MSDN-Library durchsuchenCreateFile mit dwFlagsAndAttributes = FILE_FLAG_DELETE_ON_CLOSE eine temporäre Datei erstellen, die gelöscht wird, sobald das Programm beendet wird.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

AW: Event beim Schließen / "Abschiessen" des Programms

  Alt 3. Okt 2010, 11:24
Und was hat er davon? Ich kann dir nicht ganz folgen. Und ich wäre mir nicht so sicher, ob die API-Funktion noch aufgerufen wird, weil der Prozess ja abgeschossen wird. Wenn der Klitschko dir eine vor die Birne haut, dann wirst du auch keine Zeit mehr haben dir die Nase zu putzen bevor du umfällst.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von KahPee
KahPee

Registriert seit: 12. Mai 2009
214 Beiträge
 
Turbo Delphi für Win32
 
#5

AW: Event beim Schließen / "Abschiessen" des Programms

  Alt 3. Okt 2010, 11:47
Vielleicht ist das auch der falsche Ansatz (weil hier jemand fragt was hab ich davon). Ich habe vor, dass das Programm nicht zweimal gestartet werden kann. Mein erster Gedanke war beim Starten zu gucken ob die "MeinProgramm.exe" schon gestartet ist. Nur ist es so, dass sich das Programm logischer Weise dann selbst erkennt^^. Nun sollte eine Booleanvariable in einer Datei genau das Problem beheben. Beim Start wird die Variable auf true und beim schließen auf false gesetzt. Das programm startet in der Folge nur wenn diese Variabele auf false steht. Wenn das Programm nun aber "abgeschossen" wird. Weil es einen Bug hat und nicht mehr weiterläuft. Dann gibt es das Problem, dass man den Wert erst per Hand ändern muss damit das Programm wieder startet.

Gibt es noch andere Lösungsvorschläge - jetzt wo ich ein bisschen klarer ausgedrückt habe worum es mir eigentlich geht?

mfg Kahpee
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Event beim Schließen / "Abschiessen" des Programms

  Alt 3. Okt 2010, 11:58
Und was hat er davon? Ich kann dir nicht ganz folgen. Und ich wäre mir nicht so sicher, ob die API-Funktion noch aufgerufen wird, weil der Prozess ja abgeschossen wird. Wenn der Klitschko dir eine vor die Birne haut, dann wirst du auch keine Zeit mehr haben dir die Nase zu putzen bevor du umfällst.
Die Datei wird korrekt wieder gelöscht, auch wenn das Programm mit dem Task-Manager abgeschossen wird (ich habe es aber auch erst geglaubt als ich es gesehen habe )

Nun ob er schaut ob in einer Datei ein entsprechender Wert gesetzt ist, oder ob eine Datei vorhanden ist ... kommt ja quasi aufs gleiche heraus ... allerdings um zu überprüfen ob die Anwendung aktuell läuft oder nicht kann ich ja auch bei den laufenden Prozessen nachsehen

Viel interessanter ist es zu wissen, ob das Programm während der letzten Ausführung abgeschossen (bzw. unkonventionell) beendet wurde. Und dafür müsste die Datei bestehen bleiben.

@KahPee Schau mal nach Hier im Forum suchenMutex, das braucht man zur Erkennung, ob eine Anwendung schon läuft
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#7

AW: Event beim Schließen / "Abschiessen" des Programms

  Alt 3. Okt 2010, 11:59
Die eleganteste Art und Weise, ein Programm vor mehrfachem Starten zu schützen ist eine Mutex. Einfach mal suchen, dann findest du auch die Beispiele dazu.

ein paar Links:
Bernhard
Bernhard
Iliacos intra muros peccatur et extra!

Geändert von rollstuhlfahrer ( 3. Okt 2010 um 12:03 Uhr) Grund: Links eingefügt
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#8

AW: Event beim Schließen / "Abschiessen" des Programms

  Alt 3. Okt 2010, 12:18
Delphi-Quellcode:
procedure AbortIfNotUnique (const Bezeichnung: string);
begin
  createMutex( nil, true, PWideChar(Bezeichnung));
  if GetLastError = ERROR_ALREADY_EXISTS then
  begin
    MessageDlg('Das Programm '+Bezeichnung+' ist schon in Betrieb'#13#10
                +'Sie können immer nur eine Version des Programmes starten',
                mtError,[mbOk],0);
    halt;
  end;
end;
  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 20:30 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