You can be accomplished by calling the API function ExitWindowEx shutdown, examples are as follows: [StructLayout (LayoutKind.Sequential, Pack = 1)] internal struct TokPriv1Luid {public int Count; public long Luid; public int Attr;} [DllImport ( "kernel32.dll ", ExactSpelling = true)] internal static extern IntPtr GetCurrentProcess (); [DllImport (" advapi32.dll ", ExactSpelling = true, SetLastError = true)] internal static extern bool OpenProcessToken (IntPtr h, int acc, ref IntPtr phtok); [DllImport ( "advapi32.dll", SetLastError = true)] internal static extern bool LookupPrivilegeValue (string host, string name, ref long pluid); [DllImport ( "advapi32.dll", ExactSpelling = true, SetLastError = true)] internal static extern bool AdjustTokenPrivileges (IntPtr htok, bool disall, ref TokPriv1Luid newst, int len, IntPtr prev, IntPtr relen); [DllImport ( "user32.dll", ExactSpelling = true, SetLastError = true)] internal static extern bool ExitWindowsEx (int FLG, INT REA); INTERNAL const INT SE_PRIVILE_ENABED = 0x00000002; Internal const INT token_ QUERY = 0x00000008; internal const int TOKEN_ADJUST_PRIVILEGES = 0x00000020; internal const string SE_SHUTDOWN_NAME = "SeShutdownPrivilege"; internal const int EWX_LOGOFF = 0x00000000; internal const int EWX_SHUTDOWN = 0x00000001; internal const int EWX_REBOOT = 0x00000002; internal const int EWX_FORCE = 0x00000004; internal const int EWX_POWEROFF = 0x00000008; internal const int EWX_FORCEIFHUNG = 0x00000010; private void DoExitWin (int flg) {bool ok; TokPriv1Luid tp; IntPtr hproc = GetCurrentProcess (); IntPtr htok = IntPtr.Zero; ok =