tags:

views:

698

answers:

3

I am doing an application which is used to clear the Temp files, history etc, when the user log off. So how can I know if the system is going to logoff (in C#)?

A: 

You can use WMI and watch the Win32_ComputerShutdownEvent where Type is equal to 0. You can find more information about this event here, and more about using WMI in .NET here.

jrista
A: 

There is a property in Environment class that tells about if shutdown process has started:

Environment.HasShutDownStarted

But after some googling I found out that this may be of help to you:

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

But if you only want to clear temp file then I think distinguishing between shutdown or log off is not of any consequence to you.

TheVillageIdiot
Keep in mind though, on Vista+ you have very little time to do stuff during shutdown, so make sure that you can't block or wait for any reason (i.e. trying to delete a file that might be on a network share, etc...)
Paul Betts
thanks @Paul then should it be advisable to make an entry somewhere so that windows clear the stuff on next reboot or login?
TheVillageIdiot
A: 

If you specifically need the log-off event, you can modify the code provided in TheVillageIdiot's answer as follows:

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