Hallo zusammen
Wenn die Form beendet wird, so wird das Ereignis Query_Unload
aufgerufen. Das kannst du nutzen um das Flag zurueckzusetzen.
Soviel ich weiss fuktioniert das sogar, wenn das Programm über den Taskmrg beendet wird. Aber nicht wenn der Prozess gekillt wird. Probleme wirds auch geben wenn sich der PC so aufhängt, dass nur noch Ausschalt-Knopf gedrückt halten funktioniert oder ähnliches…
Solche Flags haben immer das Risiko, dass das Programm irgendwann nicht mehr gestartet werden kann. Ich weiss ja nicht wieso das Programm so dringend kein zweites mal laufen darf, aber ich bin der Meinung es ist besser, das Programm verursacht in Extremsituationen mal einen Laufzeitfehler, als dass es nicht mehr Startbar ist!
Aber was ist. Programm 1 wird gestartet -> User ändert key
in der registry manuell und startet Prog 2 ?
Also wer wahllos irgend welche Keys in der Registry ändert oder löscht braucht sich nicht zu wundern, wenn manche Programme dann nicht mehr richtig funktionieren!
Was ist wenn der angemeldete User keine Rechte hat?
Das sollte schon im vorraus, z.B. bei der Installation geklärt werden.
Es ist doch normal dass ohne Schreibrechte nicht alle Anwendungen problemlos ausgeführt werden können!
Um aber noch mal zur unplanmäsigen Beedigung des Programmes zurück zu kommen:
Es muss also mit höherer sicherheit herrausgefunden werden, dass das Programm wirklich schon läuft.
Dazu könnte das Programm z.B. alle 5 Sekunden die aktuelle Uhrzeit in ein File oder die Registry schreiben. Dieser Wert wird dann beim starten ausgelesen. Ist er älter, als 5 Sekunden, so läuft das Programm nicht mehr und darf erneut gestartet werden. Das könnte allerdings Probleme geben wenn der User die Systemzeit ändert.
Deshalb eine ähnliche Methode:
Statt der Uhrzeit werden in bestimmten Zeitabständen z.B Werte von 1 bis 9 nacheinander eingetragen. Deim Start wird dann überprüft, ob der Wert sich noch ändert. Bleibt er z.B 5 Sekunden gleich läuft das Programm wohl nicht mehr.
Dann gibt es auch noch die möglichkeit mit dem laufendem Programm zu kommunizieren. Also z.B. schreibt man einen Wert in die Registry. Das laufende Programm überprüft ständig, ob ein Wert erschein. Ist dies der Fall antwortet es, es schreibt also einen Weiteren Wert in die Registry. Das Programm, das gerade überprüft ob es schon läuft wartet eine bestimmte Zeit lang auf diese Antwort. Kommt diese nicht, wird die Anwendung gestartet, anderenfalls wird sie beendet.
Gruss Phil