2009-06-12 15 views

Respuesta

9

Hay una propiedad en Medio Ambiente clase que le informa sobre si el proceso de apagado se ha iniciado:

Environment.HasShutDownStarted 

Pero después de algunas google me di cuenta que esto puede ser de ayuda para usted:

using Microsoft.Win32; 

//during init of your application bind to this event 
SystemEvents.SessionEnding += 
      new SessionEndingEventHandler(SystemEvents_SessionEnding); 

void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e) 
{ 
    if (Environment.HasShutdownStarted) 
    { 
     //Tackle Shutdown 
    } 
    else 
    { 
     //Tackle log off 
    } 
    } 

Pero si solo desea borrar el archivo temporal, entonces creo que distinguir entre apagar o cerrar sesión no tiene ninguna consecuencia para usted.

+0

Tenga en cuenta, sin embargo, en Vista + tiene muy poco tiempo para hacer cosas durante el apagado, así que asegúrese de que no puede bloquear ni esperar por ningún motivo (es decir, tratando de eliminar un archivo que pueda estar en un recurso compartido de red, etc ...) –

+0

gracias @Paul, entonces, ¿debería ser aconsejable hacer una entrada en alguna parte para que Windows limpia las cosas el próximo reinicio o inicia sesión? – TheVillageIdiot

0

Puede usar WMI y ver Win32_ComputerShutdownEvent donde Tipo es igual a 0. Puede encontrar más información sobre este evento here, y más sobre el uso de WMI en .NET here.

6

Si usted necesita específicamente el caso de finalizar la sesión, puede modificar el código proporcionado en la respuesta de TheVillageIdiot de la siguiente manera:

using Microsoft.Win32; 

//during init of your application bind to this event 
SystemEvents.SessionEnding += 
    new SessionEndingEventHandler(SystemEvents_SessionEnding); 

void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e) 
{  
    if (e.Reason == SessionEndReasons.Logoff) 
    { 
     // insert your code here 
    } 
} 
Cuestiones relacionadas