Was ist der beste Weg, um den Computer über ein C # -Programm herunterzufahren?
Ich habe ein paar Methoden gefunden, die funktionieren - ich werde sie unten veröffentlichen -, aber keine davon ist sehr elegant. Ich suche etwas, das einfacher und nativer .net ist.
Entnommen aus: einem Geekpedia-Beitrag
Diese Methode verwendet WMI zum Herunterfahren von Fenstern.
Sie müssen Ihrem Projekt einen Verweis auf System.Management hinzufügen, um dies zu verwenden.
quelle
Dieser Thread enthält den erforderlichen Code: http://bytes.com/forum/thread251367.html
aber hier ist der relevante Code:
Verwendung:
oder
quelle
Verschiedene Methoden:
EIN.
System.Diagnostics.Process.Start("Shutdown", "-s -t 10");
B. Windows-Verwaltungsinstrumentierung (WMI)
C. System.Runtime.InteropServices Pinvoke
D. Systemverwaltung
Nachdem ich eingereicht habe, habe ich so viele andere gesehen, die auch gepostet haben ...
quelle
Die hässliche Methode der alten Schule. Verwenden Sie die
ExitWindowsEx
Funktion aus der Win32-API.Im Produktionscode sollten Sie die Rückgabewerte der API-Aufrufe überprüfen, aber ich habe das weggelassen, um das Beispiel klarer zu machen.
quelle
Kurz und bündig. Rufen Sie ein externes Programm auf:
Hinweis: Dies ruft das Windows-Programm Shutdown.exe auf, sodass es nur funktioniert, wenn dieses Programm verfügbar ist. Möglicherweise treten Probleme unter Windows 2000 (wo shutdown.exe nur im Resource Kit verfügbar ist) oder XP Embedded auf .
quelle
Sollte arbeiten.
Zum Neustart ist es / r
Dadurch wird die PC-Box direkt und sauber ohne Dialogfelder neu gestartet.
quelle
shutdown /s /t 0 //For shutdown
shutdown /r /t 0 //For restart
shutdown /h /t 0 //For hibernate
Versuchen Sie außerdem, sie für dasselbe Ergebnis in CMD einzugeben.Sie können den Herunterfahrvorgang starten:
shutdown -s -t 0
- Herunterfahrenshutdown -r -t 0
- Neustartquelle
Beachten Sie, dass dies
shutdown.exe
nur ein Wrapper istInitiateSystemShutdownEx
, der einige Feinheiten enthält, die in fehlenExitWindowsEx
quelle
Ich hatte Probleme beim Versuch, die oben akzeptierte WMI-Methode zu verwenden, da ich trotz der Ausführung des Programms als Administrator immer keine Ausnahmen hatte.
Die Lösung bestand darin, dass der Prozess das Privileg für sich selbst anforderte. Ich fand die Antwort unter http://www.dotnet247.com/247reference/msgs/58/292150.aspx, geschrieben von einem Typen namens Richard Hill.
Ich habe meine grundlegende Verwendung seiner Lösung unten eingefügt, falls dieser Link alt wird.
quelle
Gerade in dem Pop Catalin Antwort, hier ist ein Einzeiler , welche Fährt den Computer ohne Fenster anzuzeigen:
quelle
Ich habe versucht, mit der WMI-Methode von roomaroo Windows 2003 Server herunterzufahren, aber es würde nicht funktionieren, bis ich der Main () - Deklaration "[STAThread]" (dh das Threading-Modell " Single Threaded Apartment ") hinzugefügt habe :
Ich habe dann versucht, einen Thread herunterzufahren, und um das zum Laufen zu bringen, musste ich auch den "Apartment State" des Threads auf STA setzen:
Ich bin ein C # Noob, daher bin ich mir nicht ganz sicher, welche Bedeutung STA-Threads für das Herunterfahren des Systems haben (selbst nachdem ich den oben veröffentlichten Link gelesen habe). Vielleicht kann jemand anderes näher darauf eingehen ...?
quelle
Main()
braucht es nicht[STAThread]
.** Ausgearbeitete Antwort ...
quelle
Verwenden Sie shutdown.exe. Verwenden Sie das PowerShell-Ausführungsskript, um Probleme mit der Übergabe von Argumenten, der komplexen Ausführung und der Ausführung von WindowForms zu vermeiden:
System.Management.Automation.dll sollte unter dem Betriebssystem installiert und in GAC verfügbar sein.
Entschuldigung für mein Englisch.
quelle
Es gibt keine native .net-Methode zum Ausschalten des Computers. Sie müssen den API-Aufruf ExitWindows oder ExitWindowsEx P / aufrufen.
quelle
Wenn Sie den Computer remote herunterfahren möchten, können Sie verwenden
Klicken Sie auf eine beliebige Schaltfläche
quelle