Here is a quick set of functions that will allow you to reboot / shutdown / logoff windows from c#

There is a simple alternative solution but running shell commands from programs isn't always as reliable as calling the api so while something like this will work it really isn't a great solution

System.Diagnostics.Process.Start("shutdown", "-l -t 00");

Some reason why the above won't always work would be

  • What if there is a file called shutdown in the current working directory?
    (security hole here with network drives)
  • What if shutdown is not available on the path?
  • What if the user does not have permission? (some places only give permissions
    to reboot)

So here is a better solution. One that might actually work and as a bonus it will give you all the option available from C#. Just so you are aware I have this in a shared code lib called Stev.Win32 along with a bunch of other Win32 call's.

public static class User32
{
    [DllImport("user32.dll")]
    public static extern bool ExitWindowsEx(ExitWindowsFlags uFlag, UInt32 dwReserved);

    public static bool ExitWindowsEx(ExitWindowsFlags uFlag)
    {
        return ExitWindowsEx(uFlag, 0);
    }
}

[Flags]
public enum ExitWindowsFlags {
    EWX_LOGOFF = 0,
    EWX_SHUTDOWN = 0x1,
    EWX_REBOOT = 0x2,
    EWX_FORCE = 0x4,
    EWX_POWEROFF = 0x8,
    EWX_FORCEIFHUNG = 0x10,
    EWX_RESTARTAPPS = 0x40
}

To use it simply call User32.ExitWindowsEx(ExitWindowsFlags.LogOff); You can also alter the options for more control.



Did You find this page useful?

Yes No



Last Modified: 12 December 2016

Releated Posts


2011-10-27 - CSharp - Number Of Cores and Processors
2011-10-04 - CSharp - Thread Queue Example
2011-09-29 - CSharp - Background Thread / Task
2011-09-17 - CSharp - Lookup Hostname
2011-08-29 - CSharp - IsGuid
2011-08-29 - C Sharp - StopWatch, The high resolution timer
2011-08-26 - CSharp - Convert Between Meters and Feet
2011-08-23 - CSharp - ThreadPool and Windows Forms
2011-08-10 - C Sharp - MD5Sum / SHASum
2011-07-22 - CSharp - Fibonacci sum
2011-07-13 - CSharp - Palindrome
2011-07-11 - CSharp - The string Reverse
2011-07-10 - CSharp - Interviews FizzBuzz
2011-06-27 - CSharp - HowTo Parse a URL
2011-06-22 - CSharp - Extending any class
2011-06-13 - ASPNET - Login by username or email
2011-05-12 - CSharp - ASPNET Logoff
2011-03-07 - C Sharp - Windows Logoff
2011-03-02 - ASPNET - Dynamic Controls
2011-03-01 - C Sharp - Resize an image by size of height
2011-02-23 - C Sharp / MSSQL Get inserted value of NEWSEQUENTIALID()
2011-02-10 - CSharp - Shutdown or reboot windows
2011-02-10 - CSharp - Wake on Lan (WOL) Packet
2011-02-06 - C Sharp - Gridview Bound Yes No
2011-02-05 - MSSQL - Levenshtein
2011-01-30 - MSSQL - Enabling CLR Functions
2011-01-30 - MSSQL - Adding MD5 checksum support
2011-01-30 - MSSQL - RegEx Support
2011-01-30 - MSSQL - Adding SHASum support