Obtenha o evento de log off do sistema
Pergunta
Estou fazendo um aplicativo usado para limpar os arquivos de temperatura, histórico etc. quando o usuário efetuará login. Então, como posso saber se o sistema vai fazer logoff (em C#)?
Solução
Existe uma propriedade em Meio Ambiente aula que fala sobre se o processo de desligamento foi iniciado:
Environment.HasShutDownStarted
Mas depois de pesquisar no Google, descobri que isso pode ser útil para você:
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
}
}
Mas se você deseja limpar apenas o arquivo temporário, acho que distinguir entre desligamento ou log OFF não é de nenhuma conseqüência para você.
Outras dicas
Se você precisar especificamente do evento de log-off, poderá modificar o código fornecido na resposta do TheVillageidiot da seguinte forma:
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
}
}
Se você tem um Formulário do Windows, você pode lidar com o FormClosing
evento, então verifique o e.CloseReason
valor enum para determinar se é igual a CloseReason.WindowsShutDown
.
private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
{
if (e.CloseReason == CloseReason.WindowsShutDown)
{
// Your code here
}
}