Reboot: Neustart des Computers mit .NET (C#/VB) auslösen

Der Dotnet-Doktor  –  1 Kommentare

Um aus eigener Software heraus einen Neustart des Computers (Reboot) auszulösen, gibt es mehrere Optionen:

  1. ausführen des Kommandozeilenwerkzeugs shutdown.exe mit der Option /r (über Start eines Prozesses mit System.Diagnostics.Process)
  2. ausführen des PowerShell-Commandlets restart-Computer (über Start von powershell.exe mit System.Diagnostics.Process oder aber das Hosting der PowerShell im .NET-Prozess)
  3. über die Funktion ExitWindowsEx aus dem Win32-API
  4. über die Windows Management Instrumentation (WMI)-Klasse Win32_OperatingSystem (die es seit Windows 2000 fest ins Betriebssystem eingebaut gibt)

Ich finde den vierten Weg gut (u.a. weil ich ein WMI-Fan bin). Hier der Programmcode in C# (es ist eine Referenz auf die System.Management.dll – verfügbar ab .NET 1.0 – notwendig):

// Anstelle des Punktes (lokaler Rechner) auch Rechnername oder IP möglich
ManagementObject mo = new ManagementObject(@"\\.
\root\cimv2:Win32_OperatingSystem=@");

// Wichtig: Ohne diese Rechteerhöhung, wird der Reboot nicht möglich sein
mo.Scope.Options.EnablePrivileges = true;
 try    {     
// Reboot-Methode ohne Parameter ausführen
object ergebnis = mo.InvokeMethod("Reboot", new object[] { });
// Ergebnis auswerten
if (ergebnis == null || (uint)ergebnis > 0)
{ Console.WriteLine("Reboot nicht möglich."); }
else
{ Console.WriteLine("Reboot startet..."); } }
catch (Exception ex)
{ Console.WriteLine("Fehler: " + ex.Message); }