Apa cara terbaik untuk mematikan komputer dari program C #?
Saya telah menemukan beberapa metode yang berfungsi - saya akan mempostingnya di bawah ini - tetapi tidak ada satupun yang sangat elegan. Saya mencari sesuatu yang sederhana dan asli. Net.
Bekerja dimulai dengan windows XP, tidak tersedia di win 2000 atau lebih rendah:
Ini adalah cara tercepat untuk melakukannya:
Process.Start("shutdown","/s /t 0");
Kalau tidak, gunakan P / Invoke atau WMI seperti yang dikatakan orang lain.
Sunting: cara menghindari membuat jendela
var psi = new ProcessStartInfo("shutdown","/s /t 0");
psi.CreateNoWindow = true;
psi.UseShellExecute = false;
Process.Start(psi);
Diambil dari: sebuah posting Geekpedia
Metode ini menggunakan WMI untuk mematikan windows.
Anda harus menambahkan referensi ke System.Management ke proyek Anda untuk menggunakan ini.
sumber
Utas ini menyediakan kode yang diperlukan: http://bytes.com/forum/thread251367.html
tapi ini kode yang relevan:
Pemakaian:
atau
sumber
Metode yang berbeda:
SEBUAH.
System.Diagnostics.Process.Start("Shutdown", "-s -t 10");
B. Instrumentasi Manajemen Windows (WMI)
C. System.Runtime.InteropServices Pinvoke
D. Manajemen Sistem
Setelah saya kirim, saya telah melihat begitu banyak orang lain juga telah diposting ...
sumber
Metode jelek jadul. Gunakan
ExitWindowsEx
fungsi dari Win32 API.Dalam kode produksi Anda harus memeriksa nilai kembali panggilan API, tetapi saya mengabaikannya untuk membuat contoh lebih jelas.
sumber
Pendek dan manis. Panggil program eksternal:
Catatan: Ini menyebut program Windows Shutdown.exe, jadi itu hanya akan berfungsi jika program itu tersedia. Anda mungkin memiliki masalah pada Windows 2000 (di mana shutdown.exe hanya tersedia di kit sumber daya) atau XP Embedded .
sumber
Harus bekerja
Untuk restart, ini / r
Ini akan memulai ulang kotak PC secara langsung dan bersih, tanpa dialog.
sumber
shutdown /s /t 0 //For shutdown
shutdown /r /t 0 //For restart
shutdown /h /t 0 //For hibernate
Juga, coba ketikkan ke CMD untuk hasil yang sama.Anda dapat meluncurkan proses mematikan:
shutdown -s -t 0
- Mematikanshutdown -r -t 0
- Mengulang kembalisumber
Perhatikan bahwa
shutdown.exe
ini hanyalah pembungkus sajaInitiateSystemShutdownEx
, yang menyediakan beberapa barang hilangExitWindowsEx
sumber
Saya mengalami kesulitan mencoba menggunakan metode WMI yang diterima di atas karena saya selalu mendapat hak istimewa tidak memegang pengecualian meskipun menjalankan program sebagai administrator.
Solusinya adalah proses meminta hak istimewa itu untuk dirinya sendiri. Saya menemukan jawabannya di http://www.dotnet247.com/247reference/msgs/58/292150.aspx ditulis oleh seorang pria bernama Richard Hill.
Saya telah menempelkan penggunaan dasar saya atas solusinya di bawah jika tautannya menjadi tua.
sumber
Hanya untuk menambah jawaban Pop Catalin, berikut adalah satu liner yang mematikan komputer tanpa menampilkan jendela apa pun:
sumber
Saya mencoba metode WMI roomaroo untuk mematikan Windows 2003 Server, tetapi tidak akan berfungsi sampai saya menambahkan `[STAThread] '(yaitu model threading " Single Threaded Apartment ") ke deklarasi Main ():
Saya kemudian mencoba untuk mematikan dari utas, dan untuk membuatnya berfungsi saya harus mengatur "Apartemen Negara" dari utas ke STA juga:
Saya seorang C # noob, jadi saya tidak sepenuhnya yakin akan pentingnya thread STA dalam hal mematikan sistem (bahkan setelah membaca tautan yang saya posting di atas). Mungkin orang lain bisa menguraikan ...?
sumber
Main()
tidak perlu[STAThread]
.** Jawaban Terinci ...
sumber
Gunakan shutdown.exe. Untuk menghindari masalah dengan melewatkan argumen, eksekusi kompleks, eksekusi dari WindowForms menggunakan skrip eksekusi PowerShell:
System.Management.Automation.dll harus diinstal pada OS dan tersedia di GAC.
Maaf untuk bahasa Inggris saya.
sumber
Tidak ada metode .net asli untuk mematikan komputer. Anda perlu P / Panggil panggilan API ExitWindows atau ExitWindowsEx.
sumber
Jika Anda ingin mematikan komputer dari jarak jauh maka Anda dapat menggunakannya
pada tombol apa saja klik
sumber