Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Gesperrte Anwendunge bei Absturz freigeben (https://www.delphipraxis.net/46841-gesperrte-anwendunge-bei-absturz-freigeben.html)

thomasch 1. Jun 2005 14:04


Gesperrte Anwendunge bei Absturz freigeben
 
Hallo,
ich soll zur Laufzeit ein anderes Programm zeitweise sperren. Dank windows.EnableWindow(..) tut das auch alles wie es soll.

Jetzt meine Frage:
Kann ich sicherstellen, dass bei einem Absturz meines Programms das extere wieder freigeben wird?
Wenn nein, gibt es andere Möglichkeiten, das Ziel zu ereichen?

Danke schonmal

Thomasch

Dani 1. Jun 2005 14:23

Re: Gesperrte Anwendunge bei Absturz freigeben
 
Hi, du könntest ein zweites Programm dazu starten, das nur prüft, ob deine erste Anwendung noch läuft/aktiv ist, und im Falle eines Absturzes das Fenster wieder aktivieren.

Es gibt meines Wissens nach keine zuverlässige Möglichkeit, den Absturz des eigenen Programms festzustellen. Man kann ja auch z.B. kaum seinen eigenen Tod feststellen.

Gruß

barf00s 1. Jun 2005 14:26

Re: Gesperrte Anwendunge bei Absturz freigeben
 
das stimmt, sowas is nich möglich...

aber was vllt gehn würde wenn du irgendwo ne liste mit dein änderungen hinterlegst, die dann im zweifelsfall wieder ausgelesen werden kann.
das man dein program dan neustartet und das diese datei einliest, damits wieder bescheid weis was die vorangegangene instanz alles verändert hat ... kA </lautdenk>

mr47 1. Jun 2005 14:33

Re: Gesperrte Anwendunge bei Absturz freigeben
 
Die Lösung von Dani ist die bessere! Dafür reicht sogar ein fensterloser Dienst(??) der einfach aufpasst dass alles sauber abläuft...

mfg

barf00s 1. Jun 2005 14:34

Re: Gesperrte Anwendunge bei Absturz freigeben
 
naja aber wieder 'n extra programm dasn anderes programm überwacht? :)

m.wollert 1. Jun 2005 14:39

Re: Gesperrte Anwendunge bei Absturz freigeben
 
Hi,

ich hab einmal einen Thread erstellt, der nichts anderes tut, als alle paar sekunden in ein bestimmtes verzeichnis einen "timestamp" zu schreiben. Ist die Anwendung geschlossen worden, wurde die Datei gelöscht, ist die Anwendung abgestürzt, wurde der Timestamp nicht mehr aktualisiert.

Diesen Timestamp hat die Anwendung beim Öffnen ausgelesen und ausgewertet - dementsprechend wurde die Anwendung gestartet oder der Start verweigert.

Notwendig war dies bei mir, da diese Anwendung auf dem Netzwerk nur von einer Person zur gleichen Zeit gestartet werden durfte.

Wenn Du möchtest kann ich den Thread anhängen (is aber ein wenig quick&dirty ;)

MfG
Michael

TeronG 1. Jun 2005 14:40

Re: Gesperrte Anwendunge bei Absturz freigeben
 
Hi
also ich arbeite in solchen (oder ähnlichen Fällen) mit nem "WatchDog" ...
würde in deinem fall ein 2tes Proggie starten wobei sich beide Programme gegenseitig neustarten müssten, wenn sie nimmer gehen.

(Mache das so bei einer SPS / PC kombination beide haben ein sich dauernd änderndes Signal (High/Low) sobald einer von beiden länger nicht mehr reagiert, handelt der Andere)

thomasch 1. Jun 2005 14:41

Re: Gesperrte Anwendunge bei Absturz freigeben
 
Zitat:

Zitat von Dani
Hi, du könntest ein zweites Programm dazu starten, das nur prüft, ob deine erste Anwendung noch läuft/aktiv ist, und im Falle eines Absturzes das Fenster wieder aktivieren.
[...]

Das wäre eine Variante - wobei ich mir nicht sicher bin, wie man das ohne größeren Aufwand realisert. Immerhin kenne ich ja erstmal "mein" Handle nicht. Allerdings - wenn man sowas als Service baut dürfte das noch nichtmal groß auffallen.

Ein Programm mitzuliefern, was im Notfall die andere Anwendung entsperrt, oder mein Programm mit einer entsprechenden Parameteroption auszustatten wäre zwar die einfachste Variante, düfte aber wohl aus Marketinggründen ausfallen.

Viele Grüße


Thomasch

barf00s 1. Jun 2005 14:49

Re: Gesperrte Anwendunge bei Absturz freigeben
 
@terong

heist das nich "machine"?

TeronG 1. Jun 2005 15:22

Re: Gesperrte Anwendunge bei Absturz freigeben
 
Zitat:

Zitat von barf00s
@terong

heist das nich "machine"?

:wiejetzt: ?? meinst du meine Signatur :gruebel: das währe aber dann ziemlich OT ... (richtig aber dennoch OT ^^)
[edit]: btw.: thanks für den hinweis ^^

onT: ka aber evtl. kannste ja statt nem 2ten Proggie ja einen Thread für sowas verwenden :gruebel: (hab noch nie mit Threads gearbeitet ^^)

barf00s 1. Jun 2005 15:28

Re: Gesperrte Anwendunge bei Absturz freigeben
 
wenn das program abstürtzt dann hilft auchn extra thread nich :)
da muss wenn dann schon nen 2tes programm her, oder so wie ichs sagte, mit sonem log, das man dann wieder auslesen kann, damit das program wieder bescheidweis, wenn mans dann neustartet (neustarten muss)

Dani 1. Jun 2005 15:43

Re: Gesperrte Anwendunge bei Absturz freigeben
 
Zitat:

Zitat von thomasch
Das wäre eine Variante - wobei ich mir nicht sicher bin, wie man das ohne größeren Aufwand realisert. Immerhin kenne ich ja erstmal "mein" Handle nicht.

Irgendwie muss die Hauptanwendung das Fenster doch finden? Wenn nach dem Programmabsturz Bedingungnen herrschen könnten, die verhindern, dass man das Fenster nochmal finden kann, würde ich den Handle vor der Deaktivierung in eine Datei schreiben.

Frage: Wie kommt es eigentlich zu dem Problem? Die meisten Entwickler optimieren ihre Anwendungen eher daraufhin, gar nicht erst abzustürzen :mrgreen:

barf00s 1. Jun 2005 15:45

Re: Gesperrte Anwendunge bei Absturz freigeben
 
davon red ich ja die ganze zeit - herrje ^^

m.wollert 1. Jun 2005 15:47

Re: Gesperrte Anwendunge bei Absturz freigeben
 
@barf00s
Doch, der Thrad stirbt dann ja auch - und schreibt demnach auch keine neue Sperrzeit mehr in die Datei. D.h. ein paar Sekunden nach dem "abschmieren" ist die Anwendung wieder startbereit.

barf00s 1. Jun 2005 15:49

Re: Gesperrte Anwendunge bei Absturz freigeben
 
das hab ich doch gesagt - das einem hier ständig die worte im munde umgedreht werden ^^

thomasch 1. Jun 2005 16:26

Re: Gesperrte Anwendunge bei Absturz freigeben
 
Zitat:

Zitat von Dani
Zitat:

Zitat von thomasch
Das wäre eine Variante - wobei ich mir nicht sicher bin, wie man das ohne größeren Aufwand realisert. Immerhin kenne ich ja erstmal "mein" Handle nicht.

Irgendwie muss die Hauptanwendung das Fenster doch finden? Wenn nach dem Programmabsturz Bedingungnen herrschen könnten, die verhindern, dass man das Fenster nochmal finden kann, würde ich den Handle vor der Deaktivierung in eine Datei schreiben.

Frage: Wie kommt es eigentlich zu dem Problem? Die meisten Entwickler optimieren ihre Anwendungen eher daraufhin, gar nicht erst abzustürzen :mrgreen:

Ich hatte das erst so verstanden, dass erst der Watchdog gestartet wird - dann kenne ich das Handle meiner Hauptanwendung zu dessen Startzeit nicht. Wenn ich den Watchdog aus meiner Anwendung heraus starte, kann ich dem beide Handles (das meiner und das des externen Programms) übergeben.

Die Hauptanwendung findet das externe Programm übrigens über GetActiveOleObject(...).

Zu Deiner Frage:
Murphy ist bekanntlich überall - und dass der Kunde ein - aus seiner Sicht - eingefrorenes Programm sieht, möchte ich mir einfach nicht vorstellen - zumal wenn die Änderungen der letzten Stunden nicht gespeichert wurden...

Viele Grüße

Thomasch


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:59 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