2009-07-02 14 views
14

En la oficina, cuando salgo por la noche rara vez cierro la sesión o reinicio. Simplemente bloqueo mi estación de trabajo y me voy a casa, dejando todas mis herramientas de desarrollo exactamente como las dejé.¿Cómo reiniciar mi aplicación si la Actualización de Windows fuerza un reinicio?

Si Windows-Update pasa y reinicia mi máquina en medio de la noche, estoy un poco molesto porque cuando vuelva a iniciar sesión la mañana siguiente, cualquier aplicación de MS Office o instancia de Visual Studio que haya ejecutado tendrá ya reiniciado automáticamente, abriendo los archivos/proyectos/soluciones en los que he estado trabajando.

Mi pregunta es: ¿Cómo puedo hacer que mis aplicaciones de Windows Forms (C#) hagan esto? ¿Hay alguna forma de que mi aplicación "registre" que quiere reiniciarse si el sistema se reinicia automáticamente?

+0

Me gustaría saberlo también para las aplicaciones WPF. Uno esperaría que esto fuera independiente del marco GUI. – JCCyC

+0

¿Has intentado poner el ejecutable en el inicio? – northpole

+0

@birdlips: Ese no es el comportamiento deseado. No quiero que mi aplicación * siempre * comience cuando Windows se inicie. Solo si se estaba ejecutando cuando Windows Update cierra Windows. – Yoopergeek

Respuesta

8

I thinkRegisterApplicationRestart La función de API de Win32 puede ser lo que buscas, es parte de la API de Restart Manager.

+2

Tenga en cuenta que la plataforma de cliente mínima compatible es Windows Vista. –

+0

Esto parece ser para C++. Ahora hay una API administrada de reinicio y recuperación. –

+0

@Jacob - umm, yup - de ahí que yo diga que es una función Win32, no hay nada que impida que OP haga una llamada a PInvoke =) – Rob

4

Si tiene Windows Vista o Windows 7, puede usar la API de reinicio y recuperación administrada. Los enlaces en esa página también apuntan a cierta utilidad el blog entradas

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

+1

Un pequeño punto (acaba de volver a leer las entradas del blog de Daniel Moth, recuerdo haberlas leído originalmente publicado ahora!) - en realidad no hay una API administrada, lo que DM demuestra es cómo llamar a la API WIn32 desde código administrado =) – Rob

+0

Buen enlace de video. Pero no responde a la pregunta: quiero que mi aplicación se reinicie cuando Windows se reinicie cuando se vea forzada a cerrarse porque la Actualización de Windows está forzando el reinicio de Windows, no cuando mi aplicación falla en una bola de fuego de llamas. – Yoopergeek

+0

Creo que responde su pregunta. Creo que se llamará a la función en cualquier caso. Aquí está el enlace a las transcripciones .NET Rocks que parece indicarlo.Busque "reiniciar" en la página 7 http://perseus.franklins.net/dotnetrocks_0443_kate_gregory.pdf –

0

Paso 1: Encontrar una manera de diferenciar un reinicio ventanas son activadas por una normal. Una solución sería intentar preprocesar messages. Probablemente sean diferentes para un reinicio desencadenado por Windows ... o al menos están en Vista en algunos casos:/

Paso 2: Si detecta que se trata de un reinicio desencadenado por Windows, agregue un programado de una sola vez tarea.

2

Una forma sencilla es añadir una entrada a la siguiente clave del registro:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce 

Basta con crear un valor que contiene la ruta de la aplicación (incluyendo opcionalmente argumentos de línea de comandos). La aplicación se ejecutará en el siguiente inicio, luego se borrará el valor.

Cuestiones relacionadas