Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Reboot machine from a C#/WPF app

I want to have a button in my WPF app that restarts the machine. This app is always running on Vista.

The fact that a quick search hasn't turned anything up makes me think this might be harder than I wish it was... any ideas? Thanks!

like image 754
Josh Santangelo Avatar asked Jul 31 '09 22:07

Josh Santangelo


People also ask

Can you restart a machine remotely?

Restarting a computer using the command line Log in as an administrator. Open Command Prompt from the Start menu. Type 'shutdown /i' in the Command Prompt window and then press ↵ Enter. A window will open with the option to restart the remote computer.

How do I restart a VM remotely?

Procedure. Use the Restart Desktop command. Select Options > Restart Desktop from the menu bar. Right-click the remote desktop icon and select Restart Desktop.


2 Answers

Try this:

System.Diagnostics.Process.Start("shutdown.exe", "-r -t 0"); 

This starts Windows' inbuilt shutdown tool, which can also shut down or logoff a remote or the local machine.

Here is the list of full options from ss64.com:

 Syntax        SHUTDOWN [logoff_option]  [/m \\Computer] [options]  logoff_option:     /i         Display the GUI (must be the first option)     /l         Log off. This cannot be used with /m or /d option     /s         Shutdown     /r         Shutdown and Restart     /a         Abort a system shutdown.                (only during the time-out period)     /p         Turn off the local computer with no time-out or warning                (only with /d)     /h         Hibernate the local computer (only with /f )     /e         Document the reason for an unexpected shutdown of a computer  Options:     /m \\Computer  : A remote computer to shutdown.     /t:xxx         : Time until system shutdown in seconds.                      The valid range is xxx=0-600 seconds. [default=30]    /c "Msg"       : An optional shutdown message [Max 127 chars]     /f             : Force running applications to close.                     This will not prompt for File-Save in any open applications.                     so will result in a loss of all unsaved data!!!     /d u:xx:yy     : List a USER reason code for the shutdown.     /d P:xx:yy     : List a PLANNED reason code for the shutdown.                      xx Specifies the major reason code (0-255)                      yy Specifies the minor reason code (0-65536) 

You'll probably notice that I have used the Linux/UNIX style of passing command-line arguments (using the '-') sign. On Windows, the convention is using '/'. This doesn't matter - the program doesn't care.

like image 69
Lucas Jones Avatar answered Oct 02 '22 11:10

Lucas Jones


You can use the ExitWindowsEx API. From pinvoke.net

[Flags] public enum ExitWindows : uint {    // ONE of the following five:    LogOff = 0x00,    ShutDown = 0x01,    Reboot = 0x02,    PowerOff = 0x08,    RestartApps = 0x40,    // plus AT MOST ONE of the following two:    Force = 0x04,    ForceIfHung = 0x10, }  [Flags] enum ShutdownReason : uint {     MajorApplication = 0x00040000,     MajorHardware = 0x00010000,     MajorLegacyApi = 0x00070000,     MajorOperatingSystem = 0x00020000,     MajorOther = 0x00000000,     MajorPower = 0x00060000,     MajorSoftware = 0x00030000,     MajorSystem = 0x00050000,      MinorBlueScreen = 0x0000000F,     MinorCordUnplugged = 0x0000000b,     MinorDisk = 0x00000007,     MinorEnvironment = 0x0000000c,     MinorHardwareDriver = 0x0000000d,     MinorHotfix = 0x00000011,     MinorHung = 0x00000005,     MinorInstallation = 0x00000002,     MinorMaintenance = 0x00000001,     MinorMMC = 0x00000019,     MinorNetworkConnectivity = 0x00000014,     MinorNetworkCard = 0x00000009,     MinorOther = 0x00000000,     MinorOtherDriver = 0x0000000e,     MinorPowerSupply = 0x0000000a,     MinorProcessor = 0x00000008,     MinorReconfig = 0x00000004,     MinorSecurity = 0x00000013,     MinorSecurityFix = 0x00000012,     MinorSecurityFixUninstall = 0x00000018,     MinorServicePack = 0x00000010,     MinorServicePackUninstall = 0x00000016,     MinorTermSrv = 0x00000020,     MinorUnstable = 0x00000006,     MinorUpgrade = 0x00000003,     MinorWMI = 0x00000015,      FlagUserDefined = 0x40000000,     FlagPlanned = 0x80000000 }  [DllImport("user32.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] static extern bool ExitWindowsEx(ExitWindows uFlags, ShutdownReason dwReason); 

And to use it:

ExitWindowsEx(   ExitWindows.Reboot,   ShutdownReason.MajorOther | ShutdownReason.MinorOther | ShutdownReason.FlagPlanned );  
like image 23
Martin Liversage Avatar answered Oct 02 '22 11:10

Martin Liversage