Jak zamknąć komputer przy użyciu C#?Jak zamknąć komputer?
Odpowiedz
Łatwy sposób: Użyj polecenia Process.Start, aby uruchomić plik shutdown.exe.
shutdown /s /t 0
Programowa sposób: P/Invoke połączenia do ExitWindowsEx
Byłby to P/Invoke Podpis:
[DllImport("aygshell.dll", SetLastError="true")]
private static extern bool ExitWindowsEx(uint dwFlags, uint dwReserved);
W każdych okolicznościach, użytkownik działa kod będzie musiał System zamykania przywileje (zwykle nie jest to problem, ale ważny punkt do zapamiętania).
Czy mógłbyś powiedzieć trochę o tym, jak człowiek wybrałby jedną z dwóch metod? Czy jest to po prostu łatwe, czy nie takie łatwe? –
Chciałbym nromally przejść do drugiej opcji w oprogramowaniu produkcyjnym, ponieważ daje większą kontrolę (przyczyny zamykania, itp.). Implementacja zajmuje nieco więcej czasu, ponieważ musiałbym sprawdzić poprawną flagę i podpis. – driis
na oko (nietestowanego):
Process.Start("shutdown", "-s -t 0");
Użyj odmianę "wylogowania użytkownika" kodu pokazanego here.
Ten kod wykorzystuje wywołanie API ExitWindowsEx
.
Twardy sposób działa na laptopach doskonale, choć zajmuje trochę czasu:
Spawn a couple endless loops in more threads than cpu cores.
Wait for overheat which will automatically shutdown a computer.
:)
Tyle spadków! Czy to tylko ja uznałem odpowiedź za zabawną? – Marcel
zabawne, więc +1. Pamiętaj: Wszystkie prace i brak zabawy sprawiają, że Jack jest nudnym chłopcem. –
różnymi metodami:
A. System.Diagnostics.Process.Start (” Shutdown "," -s -t 10 ");
B. zarządzania Windows oprzyrządowanie (WMI)
http://www.csharpfriends.com/Forums/ShowPost.aspx?PostID=36953
http://www.dreamincode.net/forums/showtopic33948.htm
C System.Runtime.InteropServices pinvoke
http://bytes.com/groups/net-c/251367-shutdown-my-computer-using-c
D Management System
http://www.geekpedia.com/code36_Shut-down-system-using-Csharp.html
Po przedstawienia, widziałem tak wielu innych również napisali ...
+1 dla opcji i linków –
Chociaż mówię, że wciąż myślę - kiedy osoba nie używa tylko pierwszej opcji? –
Nie jestem pewien, czy ktoś może wyłączyć prawa do wykonywania shutdown.exe, w takim przypadku potrzebny może być kod do wykonania ... – lakshmanaraj
WindowsController jest C# klasy otoki wokół ExitWindowsEx.
Czasami trzeba ponownie uruchomić lub zamknięcie systemu operacyjnego z aplikacji (na przykład po instalacji programu). .NET framework oferuje pośrednią sposób, aby ponownie uruchomić komputer za pomocą z Windows Management Instrumentation (WMI) klas w przestrzeni nazw System.Management , jednak nie wydaje się być pewne problemy w ich realizacji.
Dlatego stworzyliśmy klasę WindowsController , którą implementuje niektóre funkcje API do ponownego uruchomienia i zamknięcia systemu Windows na . To obsługuje wszystkie tryby ExitWindowsEx i może również hibernować i zawieszać system w stanie . Ta architektura jest dostępna w wersji C# i VB.NET. Może być skompilowany do modułu .NET lub do biblioteki, która ma być używana z innych języków .NET. Od opiera się na interfejsie API systemu Windows, to nie będzie działać w systemie Linux ani FreeBSD.
(mentalis.org)
Można również użyć InitiateSystemShutdown
http://www.pinvoke.net/default.aspx/advapi32.initiatesystemshutdown
using System;
using System.Runtime.InteropServices;
using System.Text;
public class Program
{
[DllImport("advapi32.dll") ]
public static extern bool InitiateSystemShutdown(string MachineName , string Message , uint Timeout , bool AppsClosed , bool Restart);
[DllImport("kernel32.dll") ]
public static extern uint GetLastError();
[DllImport("kernel32.dll") ]
public static extern uint FormatMessage(uint Flags , IntPtr Source , uint MessageID , uint LanguageID , StringBuilder Buffer , uint Size , IntPtr Args);
public static void Main()
{
InitiateSystemShutdown(System.Environment.MachineName, "hello", 0, false, false);
//InitiateSystemShutdown("localhost", "hello", 0, false, false);
}
}
duplikat http://stackoverflow.com/questions/102567/how-to-shutdown -the-computer-from-c – sharptooth