AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Prüfen, ob erster Start nach booten

Ein Thema von kub · begonnen am 25. Mär 2011 · letzter Beitrag vom 28. Mär 2011
Antwort Antwort
kub

Registriert seit: 13. Nov 2008
44 Beiträge
 
Delphi 10.3 Rio
 
#1

Prüfen, ob erster Start nach booten

  Alt 25. Mär 2011, 14:12
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
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

AW: Prüfen, ob erster Start nach booten

  Alt 25. Mär 2011, 14:39
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?
  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: Prüfen, ob erster Start nach booten

  Alt 25. Mär 2011, 14:40
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.
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: Prüfen, ob erster Start nach booten

  Alt 25. Mär 2011, 14:41
....ich habe eine Anwendung, die auf Hardware zugreifen muss. Die exe wird beim Start von WindowsXP gestartet -> Autostart.
Selbst geschrieben die Anwendung? Wenn ja, warum prüfst du nicht in deinem Prog ob der Zugriff auf die Hardware möglich ist.
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
  Mit Zitat antworten Zitat
kub

Registriert seit: 13. Nov 2008
44 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Prüfen, ob erster Start nach booten

  Alt 25. Mär 2011, 15:22
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.
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

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

AW: Prüfen, ob erster Start nach booten

  Alt 25. Mär 2011, 17:29
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: Global Atom: Das kann man setzen und dann kann man immer wieder auslesen, ob das noch da ist. Diese Tabelle wird nach dem abmelden wieder geleert, aber dann würde auch der Autostart nach erfolgter Anmeldung ausgeführt werden.
Bernhard
Iliacos intra muros peccatur et extra!

Geändert von rollstuhlfahrer (25. Mär 2011 um 17:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#7

AW: Prüfen, ob erster Start nach booten

  Alt 25. Mär 2011, 19:23
Zitat:
Jetzt habe ich das Problem, dass die Treiber der Hardware noch nicht bereit sind, wenn meine exe gestartet wird
Geht es wirklich um Treiber, oder um Dienste, deren Status könnte man abfragen und solange Ideln....
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von isilive
isilive

Registriert seit: 15. Okt 2008
Ort: Österreich
192 Beiträge
 
Delphi 2009 Professional
 
#8

AW: Prüfen, ob erster Start nach booten

  Alt 26. Mär 2011, 12:54
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;
Stefan
Jedoch kann die referenzbasierte Implementierung des Standard-Objektmodells in Kombination mit den komplexen syntaktischen Dereferenzierungsregeln bei einer objektorientierten API wie ein Stolperstein wirken.
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#9

AW: Prüfen, ob erster Start nach booten

  Alt 26. Mär 2011, 13:12
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?
Ja, das mit der Registry sollte in der Tat gehen, siehe MSDN-Library durchsuchenREG_OPTION_VOLATILE. Es gibt aber eine einfachere Methode, weil der Wert ja nicht gelöscht werden muß. Du kannst gucken wie lange das System schon läuft. Diesen Wert benutzt du und schreibst ihn in die Registry. Beim nächsten Start des Programms ist nur zu vergleichen ob der Vergleichswert bereits höher als die Startzeit des Systems ist.

Ist er Treiber von euch? In diesem Fall sollte der Treiber korrigiert werden.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
kub

Registriert seit: 13. Nov 2008
44 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: Prüfen, ob erster Start nach booten

  Alt 28. Mär 2011, 08:41
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
  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 03:43 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