我该如何关闭电脑?

时间:2009-03-20 08:55:30

标签: c# .net windows shutdown

如何使用C#关闭计算机?

7 个答案:

答案 0 :(得分:10)

一种简单的方法:使用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);

在所有情况下,运行代码的用户都需要关闭系统权限(通常不是问题,但重要的是要记住)。

答案 1 :(得分:5)

不同的方法:

一个。 System.Diagnostics.Process.Start(“Shutdown”,“ - - -t 10”);

B中。 Windows Management Instrumentation(WMI)

http://www.csharpfriends.com/Forums/ShowPost.aspx?PostID=36953

http://www.dreamincode.net/forums/showtopic33948.htm

℃。 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

在我提交之后,我看到很多其他人也发布了......

答案 2 :(得分:3)

WindowsController是一个围绕ExitWindowsEx的c#包装类。

  

有时你需要重启或   关闭操作系统   你的应用程序(例如,之后   安装程序)。该   .NET框架为您提供间接的   通过重启计算机的方法   Windows Management Instrumentation   System.Management中的(WMI)类   然而,命名空间似乎有   他们的实施中存在一些问题。

     

这就是我们创造的原因   WindowsController类   实现一些API函数   重启并关闭Windows。它   支持所有ExitWindowsEx模式   它也可以休眠和暂停   系统。

     

这个课程在C#和   VB.NET版本。它可以编译为   一个.NET模块或一个库   用于其他.NET语言。以来   它依赖于Windows API,它会   不适用于Linux或FreeBSD。

     

(mentalis.org)

答案 3 :(得分:1)

使用here显示的“用户注销”代码的变体。

该代码使用ExitWindowsEx API调用。

答案 4 :(得分:0)

猜测(未经测试):

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

答案 5 :(得分:0)

艰难的方式,完美适用于笔记本电脑,虽然需要一些时间:

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

:)

答案 6 :(得分:0)

您也可以使用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);

    }
}