Question

Je fais une application qui est utilisée pour effacer les fichiers temporaires, l'historique, etc., lorsque l'utilisateur se déconnecte. Alors, comment puis-je savoir si le système va se connecter (en C #)?

Était-ce utile?

La solution

Il y a une propriété dans Environnement classe qui raconte si le processus d'arrêt a commencé:

Environment.HasShutDownStarted

Mais après quelques recherches sur Google, j'ai découvert que cela peut vous être utile:

 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
     }
  }

Mais si vous voulez seulement effacer le fichier temporaire, je pense que la distinction entre la fermeture ou la déconnexion n'est d'aucune conséquence pour vous.

Autres conseils

Si vous avez spécifiquement besoin de l'événement de la connexion, vous pouvez modifier le code fourni dans la réponse de TheVillageIdiot comme suit:

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
    }
}

Vous pouvez utiliser WMI et regarder le win32_computershutdownevent où le type est égal à 0. Vous pouvez trouver plus d'informations sur cet événement ici, et plus sur l'utilisation de WMI dans .NET ici.

Si tu as un Formulaire Windows, vous pouvez gérer le FormClosing événement, puis vérifiez le e.CloseReason Valeur d'énumération pour déterminer si elle est égale à CloseReason.WindowsShutDown.

private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
{
    if (e.CloseReason == CloseReason.WindowsShutDown)
    {
        // Your code here
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top