Как мне выключить компьютер? - PullRequest
6 голосов
/ 20 марта 2009

Как выключить компьютер с помощью C #?

Ответы [ 7 ]

10 голосов
/ 20 марта 2009

Простой способ: используйте Process.Start для запуска shutdown.exe.

  shutdown /s /t 0

Программный способ: P / вызвать вызов ExitWindowsEx

Это будет подпись P / Invoke:

[DllImport("aygshell.dll", SetLastError="true")]
private static extern bool ExitWindowsEx(uint dwFlags, uint dwReserved);

При любых обстоятельствах пользователю, выполняющему код, потребуется отключить системные привилегии (обычно это не проблема, но важный момент, который нужно помнить).

5 голосов
/ 20 марта 2009

Различные методы:

A. System.Diagnostics.Process.Start («Завершение работы», «-s -t 10»);

B. Инструментарий управления Windows (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. Управление системой

http://www.geekpedia.com/code36_Shut-down-system-using-Csharp.html

После того, как я отправлю заявку, я увидел, что многие другие также опубликовали ...

3 голосов
/ 20 марта 2009

WindowsController - это класс-оболочка c # для ExitWindowsEx.

Иногда вам нужно перезагрузить или выключить операционную систему от ваши приложения (например, после установка программы). .NET Framework предлагает вам косвенный способ перезагрузить компьютер через инструментарий управления Windows (WMI) классы в System.Management пространство имен, однако, кажется, некоторые проблемы в их реализации.

Вот почему мы создали Класс WindowsController, который реализует некоторые функции API для перезагрузите и выключите Windows. Это поддерживает все режимы ExitWindowsEx и он также может переходить в спящий режим и приостанавливать система.

Этот класс доступен в C # и Версия VB.NET. Это может быть скомпилировано в модуль .NET или в библиотеку, которая будет используется из других языков .NET. поскольку это зависит от Windows API, это будет не работает на Linux или FreeBSD.

(mentalis.org)

1 голос
/ 20 марта 2009

Используйте вариацию кода "user logoff", показанного здесь .

Этот код использует вызов API ExitWindowsEx.

0 голосов
/ 04 ноября 2015

Вы также можете использовать 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);

    }
}
0 голосов
/ 20 марта 2009

Трудный путь, отлично работает на ноутбуках, хотя и занимает некоторое время:

Spawn a couple endless loops in more threads than cpu cores.
Wait for overheat which will automatically shutdown a computer.

:)

0 голосов
/ 20 марта 2009

По предположению (не проверено):

Process.Start("shutdown", "-s -t 0");
...