Intercettare spegnimento pc

mercoledì 30 aprile 2008 - 10.58

hydra Profilo | Junior Member

Salve a tutti.
Sto realizzando un servizio in c# che non deve far altro che scrivere un log, nel quale devo inserire l'ora di accensione e di spegnimento del pc. Per l'accensione non ci sono problemi, per lo spegnimento si. Pensavo bastasse scrivere il log nell'evento onStop() ma non funziona, sembra che il servizio non venga arrestato allo spegnimento del pc o che so io. Come faccio ad intercettare lo spegnimento del pc? C'è un metodo per fare questa operazione? Tnx.

Brainkiller Profilo | Guru

>Salve a tutti.
>Sto realizzando un servizio in c# che non deve far altro che
>scrivere un log, nel quale devo inserire l'ora di accensione
>e di spegnimento del pc. Per l'accensione non ci sono problemi,
>per lo spegnimento si. Pensavo bastasse scrivere il log nell'evento
>onStop() ma non funziona, sembra che il servizio non venga arrestato
>allo spegnimento del pc o che so io. Come faccio ad intercettare
>lo spegnimento del pc? C'è un metodo per fare questa operazione?
>Tnx.

In genere questo tipo di informazioni già vengono registrare nei Logs che vedi nell'Event Viewer. In ogni caso puoi provare ad agganciarti all'evento Win32 SessionEnded che scatta quando un utente fa logoff o shutdown.
Qui trovi la documentazione:
http://msdn.microsoft.com/it-it/library/microsoft.win32.systemevents.sessionended.aspx

A memoria ricordo che è più facile fare il detect dello shutdown in una WinForm rispetto ad un servizio.E' da provare.

Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

hydra Profilo | Junior Member

Ciao e grazie per la risposta. Ho provato ma non ne vengo fuori. Spulciando sul sito microsoft ho visto che loro realilzzano un servizio che comprende un form e li gestiscono gli eventi. Io ho provato ma ovviamente non va.

hydra Profilo | Junior Member

Mi è venuta in mente un'altra cosa: ho un'applicazione winform che fa da monitor per il servizio, la quale viene avviata all'accensione del pc e rimane in esecuzione in background. E' possibile fare in modo che quando si tenta di spegnere/sloggare/riavviare il computer l'applicazione interrompa questo processo ed eventualmente obbligare l'utente a spegnere il pc usando la mia applicazione?? In questo modo potrei fermare a mano il servizio e quindi scrivere sto benedetto log.

hydra Profilo | Junior Member

Allora, attualmente ho aggirato il problema in questo modo:
ho fatto in modo che non sia possibile chiudere l'applicazione (a meno di non abilitare un apposito flag), in questo modo quando windows si spegne in realtà trova l'applicazione che lo tiene aperto. Per spegnere il pc ho quindi introdotto delle funzioni sull'applicazione che, comunicando con il mio servizio, gli dicono se spegnere piuttosto che riavviare o fare altro. Nel servizio riesco così in questo modo a scrivere questo log. La soluzione comunque non mi piace tanto, anche perchè obbliga a utilizzare il mio programma per spegnere il pc, vorrei quindi intercettare lo spegnimento del pc in qualche modo.

munissor Profilo | Senior Member

Ma l'override di ServiceBase.OnShutDown non funziona?
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5