![]() |
Prüfen, ob erster Start nach booten
Hi,
ich habe eine Anwendung, die auf Hardware zugreifen muss. Die exe wird beim Start von WindowsXP gestartet -> Autostart. Jetzt habe ich das Problem, dass die Treiber der Hardware noch nicht bereit sind, wenn meine exe gestartet wird und ich Fehler bekomme, die ich nur mit größerem Aufwand alle abfangen kann. Um das zu Umgehen, habe ich eine zweite Exe, die eine entsprechende Meldung zeigt und die eigentliche Exe nach einem bestimmten delay startet. Jetzt würde ich das Ganze gerne ohne zweite exe lösen. Einfach ein delay beim Start geht nicht, da mein Programm öfter mal geschlossen und geöffnet wird und das delay dann nerven würde. Beim Systemstart kommt es auf 10sec nicht mehr an. Kann ich irgendwie herausfinden, ob meine exe während dieser Windows Sitzung schon mal gelaufen ist. Kann man, z.B. ein Flag in der Registry setzen, das beim Herunterfahren von Windows automatisch gelöscht wird? Gruß Thomas |
AW: Prüfen, ob erster Start nach booten
Du könntest dazu einen Mutex verwenden. Die existieren solange bis du sie löschst, oder der Rechner neugestartet wird.
Dann müsste man vielleicht noch an den Rihezustand denken - sind die Treiber danach sofort bereit? |
AW: Prüfen, ob erster Start nach booten
GetTickCount liefert dir die Millisekunden seit Systemstart. Bei Programmende könntest du diesen Wert in eine Datei schreiben, beim Starten auslesen und mit dem aktuellen GetTickCount vergleichen. Ist der aktuelle kleiner als der aus der Datei, wurde neugestartet. Beachte aber die Begrenzung von 49 Tagen.
|
AW: Prüfen, ob erster Start nach booten
Zitat:
Wenn nicht solange repeat bis es möglich ist. Alles andere find ich nicht gut als Lösung! Nicht selbst geschrieben die Anwendung mh... ohne zusätzliches nicht möglich! alfold |
AW: Prüfen, ob erster Start nach booten
Danke für eure Hilfe!
Ich schau mal, ob mir die Mutex oder GetTickCount Lösung besser gefällt. Der Rechner gehört zu einer Produktionsanlage,d.h. hier gibt es keinen Ruhezustand, den ich beachten muss. Das Problem mit diesem Ansatz zu lösen gefällt mir auch nicht wirklich. Leider wird der Fehler nicht gleich beim Laden des Treibers bemerkt, sondern erst nach einigen weiteren Initialisierungen . Um den Fehler sauber zu lösen, müsste ich meinen Ablauf ändern, aber da ich im Moment keine Zeit habe dies dann sauber zu testen werde ich die Umstellung mit dieser "Brücke" noch etwas hinausschieben. |
AW: Prüfen, ob erster Start nach booten
Werden Mutexe nicht automatisch gelöscht, wenn die öffnende Anwendung verschwindet? - Zumindest bei mir war/ist das so.
Bernhard ADD: So und nun die Auflösung, wie man es anders machen kann: ![]() |
AW: Prüfen, ob erster Start nach booten
Zitat:
|
AW: Prüfen, ob erster Start nach booten
Du könntest auch ein Atom in die globale Liste setzen.
Man erstellt Atome und kann danach abfragen ob es schon so eines gibt. Ich denke diese bleiben auch bis zum nächsten Systemstart präsent - wenn man sie nicht löscht.
Delphi-Quellcode:
if GlobalFindAtom('EindeutigerName') = 0 then
begin //Erster Programmstart atom := GlobalAddAtom('EindeutigerName') ...Warteschleife... oder sonstwas... end; |
AW: Prüfen, ob erster Start nach booten
Zitat:
![]() Ist er Treiber von euch? In diesem Fall sollte der Treiber korrigiert werden. |
AW: Prüfen, ob erster Start nach booten
Guten Morgen,
ich habe am Wochenende eine Methode gefunden, den Fehler gleich nach dem Laden des Treibers zu provozieren. Mit GetTicCount frage ich ab, wie lange der Rechner schon läuft und in den ersten Minuten erhöhe ich die Timeouts und Anzahl der Retry. Damit muss der Bediener bei späteren Starts nicht unnötig lange auf die Fehlermeldung warten (Fehler kann auch durch falsche Einstellungen auftreten) und nach dem Booten ist das Timingproblem gelöst. Vielen Dank noch mal an alle! Thomas |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:11 Uhr. |
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