2010-01-06 4 views
4

Y a-t-il un "ID de session de démarrage" ou un "Horodatage de démarrage" (fiable)? Pour une installation, j'ai besoin de détecter qu'un redémarrage planifié a effectivement eu lieu.Identifier un redémarrage

Je suppose que je pourrais faire un MoveFileEx() factice avec MOVEFILE_DELAY_UNTIL_REBOOT, mais j'ai espéré quelque chose de plus facile.

(Nous devons installer un paquet 3ème partie qui se comporte parfois de façon erratique après une réparation/mise à jour. Dans cet état, l'accès à l'appareil peut même bloquer le système)

(Windows XP, Vista, 7)

Répondre

3

Apparemment, Windows a l'équivalent de "uptime". Voici plus d'informations: http://support.microsoft.com/kb/555737

Si je comprends bien, cela devrait vous dire depuis combien de temps le système a été démarré. Est-ce que cette information résoudra votre problème?

+0

C'est un bon début - j'ai trouvé un échantillon mis à jour (n'ont pas encore essayé) ici: http://www.codeproject.com/Messages/2109755/Re-Not-working-on-Vista-Any-ideas- modified.aspx – peterchen

4

Pour des choses comme ça, WMI (Windows Management Instrumentation) est souvent un bon point de départ. Je sais que vous pouvez y accéder directement, ce qui peut vous permettre de déterminer si une machine a récemment redémarré.

Voici un blog avec quelques exemples de code ainsi: http://blogs.technet.com/heyscriptingguy/archive/2004/09/07/how-can-i-tell-if-a-server-has-rebooted.aspx

En fonction de votre langue de mise en œuvre, il vous suffit probablement de sortir le code de requête de la vbscript.

1

Vous pouvez rechercher dans le journal des événements système l'événement 6009 à partir de la source EventLog. Il s'agit du premier événement enregistré après chaque redémarrage.

1

Je pense que la meilleure réponse a déjà été donnée ici: Find out if computer rebooted since the last time my program ran?

Cela semble être la façon la plus simple. Utilisez GlobalFindAtom() pour voir si elle existe et créez-la, avec GlobalAddAtom(), si ce n'est pas le cas. Il persistera au-delà de l'exécution de votre programme. Si votre application s'exécute à nouveau, et voit que l'atome existe, alors ce n'est pas la première fois depuis le redémarrage.

Si l'ordinateur est redémarré, l'atome n'existe pas, indiquant qu'il s'agit de la première exécution de votre programme depuis le redémarrage.