2009-07-02 4 views
14

Au bureau, lorsque je pars pour la nuit, je me déconnecte ou redémarre très rarement. Je verrouille simplement mon poste de travail et rentre à la maison, laissant à tous mes outils de développement exactement comment je les ai laissés. Si Windows Update parcourt et redémarre ma machine au milieu de la nuit, je ne suis que légèrement agacé parce que lorsque je me reconnecte le lendemain matin, toute application MS Office ou instance de Visual Studio que j'avais en cours d'exécution aura J'ai déjà redémarré automatiquement, en ouvrant tous les fichiers/projets/solutions sur lesquels j'ai pu travailler.Comment redémarrer mon application si Windows Update force un redémarrage?

Ma question est: Comment faire pour que mes applications Windows Forms (C#) le fassent? Est-il possible que mon application "enregistre" qu'elle souhaite être redémarrée si le système redémarre automatiquement?

+0

Je voudrais savoir cela aussi pour les applications WPF. On pourrait s'attendre à ce que cela soit indépendant du cadre de l'interface graphique. – JCCyC

+0

avez-vous essayé de mettre l'exécutable au démarrage? – northpole

+0

@birdlips: Ce n'est pas le comportement souhaité. Je ne veux pas que mon application démarre * toujours * au démarrage de Windows. Seulement si elle était en cours d'exécution lorsque Windows Update arrêt Windows. – Yoopergeek

Répondre

8

I pense la RegisterApplicationRestart fonction de l'API Win32 pourrait être ce que vous cherchez, il fait partie de l'API Restart Manager.

+2

Notez que la plate-forme client prise en charge minimale est Windows Vista. –

+0

Cela semble être pour C++. Il y a maintenant un API géré de redémarrage et de récupération. –

+0

@Jacob - umm, yup - donc je dis que c'est une fonction Win32, il n'y a rien pour empêcher l'OP de faire un appel PInvoke =) – Rob

4

Si vous utilisez Windows Vista ou Windows 7, vous pouvez utiliser l'API de redémarrage et de récupération gérés. Les liens sur cette page pointent également un certain blog utile entrées

http://channel9.msdn.com/posts/DanielMoth/Windows-Vista-Restart-amp-Recovery-APIs-from-managed-code/

+1

Un petit point (après avoir relu les entrées de blog de Daniel Moth, je me souviens les avoir lu à l'origine publié maintenant!) - il n'y a pas réellement une API Managed, ce que DM démontre est comment appeler l'API WIn32 à partir du code managé =) – Rob

+0

Bon lien vidéo. Mais il ne répond pas à la question: je veux que mon application redémarre au redémarrage de Windows quand elle est forcée de se fermer parce que Windows Update force un redémarrage de Windows, pas quand mon application échoue dans une boule de flammes accidentelles. – Yoopergeek

+0

Je pense que cela répond à votre question. Je pense que la fonction sera appelée dans les deux cas. Voici le lien vers les transcriptions .NET Rocks qui semble l'indiquer.Rechercher "restart" autour de la page 7 http://perseus.franklins.net/dotnetrocks_0443_kate_gregory.pdf –

0

Étape 1: Calculez un moyen de différencier un redémarrage de Windows déclenché à partir d'un standard. Une solution serait d'essayer le prétraitement messages. Ils sont probablement différents pour un redémarrage déclenché par Windows ... ou au moins ils sont dans Vista dans certains cas:/

Étape 2: Si vous détectez qu'il s'agit d'un redémarrage déclenché par Windows, ajoutez un programme planifié et ponctuel tâche.

2

Une façon simple est d'ajouter une entrée à la clé de Registre suivante:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce 

il suffit de créer une valeur contenant le chemin de votre application (comprenant éventuellement des arguments de ligne de commande). L'application sera exécutée au prochain démarrage, puis la valeur sera supprimée.

Questions connexes