2009-07-02 4 views
14

In ufficio, quando parto per la notte molto raramente mi disconnetto o riavvio. Chiudo semplicemente la mia workstation e torno a casa, lasciando tutti i miei strumenti di sviluppo esattamente come li ho lasciati.Come riavviare la mia applicazione se Windows Update forza il riavvio?

Se Windows-Update scorre e riavvia la macchina nel bel mezzo della notte sono solo un po 'irritato perché quando accedo al mattino successivo, qualsiasi applicazione MS Office o istanza di Visual Studio che ho eseguito avrà già riavviato automaticamente, aprendo qualsiasi file/progetti/soluzioni su cui potrei aver lavorato.

La mia domanda è: Come posso fare in modo che le mie applicazioni Windows Form (C#) facciano questo? C'è un modo per la mia applicazione di "registrarsi" che vuole essere riavviato se il sistema si riavvia automaticamente?

+0

Mi piacerebbe saperlo anche per le applicazioni WPF. Ci si aspetterebbe che questo sarebbe indipendente dalla struttura della GUI. – JCCyC

+0

hai provato a mettere l'eseguibile all'avvio? – northpole

+0

@birdlips: non è il comportamento desiderato. Non voglio che la mia applicazione * sempre * inizi all'avvio di Windows. Solo se era in esecuzione quando Windows Update ha chiuso Windows. – Yoopergeek

risposta

8

I think the RegisterApplicationRestart La funzione API Win32 potrebbe essere ciò che stai cercando, fa parte dell'API di Restart Manager.

+2

Si noti che la piattaforma client minima supportata è Windows Vista. –

+0

Questo sembra essere per C++. Ora c'è un riavvio gestito e un ripristino API. –

+0

@Jacob - umm, yup - quindi mi sta dicendo che è una funzione Win32, non c'è nulla che impedisca all'OP di effettuare una chiamata PInvoke però =) – Rob

4

Se si dispone di Windows Vista o Windows 7, è possibile utilizzare l'API di riavvio e recupero gestito. I collegamenti a quella pagina sottolineano anche alcuni blog utile voci

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

+1

Un piccolo punto (avendo appena riletto i post del blog di Daniel Moth, ricordo di averli letti quando originariamente pubblicato ora!) - non esiste in realtà un'API gestita, ciò che DM dimostra è come chiamare l'API WIn32 dal codice gestito =) – Rob

+0

Buon collegamento video. Ma non risponde alla domanda: voglio che la mia applicazione si riavvii al riavvio di Windows quando è costretta a chiudere perché Windows Update sta forzando il riavvio di Windows, non quando la mia applicazione fallisce in una palla infuocata di fiamme infranti. – Yoopergeek

+0

Penso che risponda alla tua domanda. Penso che la funzione verrà chiamata in entrambi i casi. Ecco il link alle trascrizioni di .NET Rocks che sembra indicarlo.Cerca "restart" attorno a pagina 7 http://perseus.franklins.net/dotnetrocks_0443_kate_gregory.pdf –

0

Fase 1: Capire un modo per differenziare un riavvio di Windows-innescati da uno standard. Una soluzione potrebbe essere quella di provare la pre-elaborazione messages. Probabilmente sono diversi per un riavvio attivato da Windows ... o almeno in Vista in alcuni casi:/

Passaggio 2: se si rileva un riavvio attivato da Windows, aggiungere una pianificazione, una volta sola compito.

2

Un modo semplice è quello di aggiungere una voce alla seguente chiave di registro:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce 

Basta creare un valore contenente il percorso della vostra applicazione (opzionalmente inclusi argomenti della riga di comando). L'app verrà eseguita all'avvio successivo, quindi il valore verrà eliminato.