如何用C#关闭计算机
从 C# 程序关闭计算机的最佳方法是什么?
我发现了一些有效的方法 - 我将在下面发布它们 - 但它们都不是非常优雅。 我正在寻找更简单且原生 .net 的东西。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
从 C# 程序关闭计算机的最佳方法是什么?
我发现了一些有效的方法 - 我将在下面发布它们 - 但它们都不是非常优雅。 我正在寻找更简单且原生 .net 的东西。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(17)
**详细答案...
**Elaborated Answer...
摘自:Geekpedia 帖子
此方法使用 WMI 用于关闭窗口。
您需要将对 System.Management 的引用添加到您的项目中才能使用它。
Taken from: a Geekpedia post
This method uses WMI to shutdown windows.
You'll need to add a reference to System.Management to your project to use this.
该线程提供了必要的代码: http://bytes.com/forum/thread251367.html
但是这是相关代码:
用法:
或
This thread provides the code necessary: http://bytes.com/forum/thread251367.html
but here's the relevant code:
Usage:
or
不同的方法:
A.
System.Diagnostics.Process.Start("Shutdown", "-s -t 10");
B. Windows Management Instrumentation (WMI)
C. System.Runtime.InteropServices Pinvoke
D. 系统管理
我提交后,我看到很多其他人也发了...
Different methods:
A.
System.Diagnostics.Process.Start("Shutdown", "-s -t 10");
B. Windows Management Instrumentation (WMI)
C. System.Runtime.InteropServices Pinvoke
D. System Management
After I submit, I have seen so many others also have posted...
简短而甜蜜。 调用外部程序:
注意:这会调用 Windows 的 Shutdown.exe 程序,因此仅当该程序可用时它才有效。
您可能在 Windows 2000(其中 shutdown.exe 仅在资源工具包中可用)或 XP 嵌入式。
Short and sweet. Call an external program:
Note: This calls Windows' Shutdown.exe program, so it'll only work if that program is available.
You might have problems on Windows 2000 (where shutdown.exe is only available in the resource kit) or XP Embedded.
老派的丑方法。 使用 Win32 API 中的
ExitWindowsEx
函数。在生产代码中,您应该检查 API 调用的返回值,但为了使示例更清晰,我省略了这一点。
The old-school ugly method. Use the
ExitWindowsEx
function from the Win32 API.In production code you should be checking the return values of the API calls, but I left that out to make the example clearer.
请注意,
shutdown.exe
只是InitiateSystemShutdownEx
,它提供了ExitWindowsEx
中缺少的一些细节Note that
shutdown.exe
is just a wrapper aroundInitiateSystemShutdownEx
, which provides some niceties missing inExitWindowsEx
应该管用。
对于重新启动,它是 /r
这将直接干净地重新启动 PC 机,没有对话框。
Should work.
For restart, it's /r
This will restart the PC box directly and cleanly, with NO dialogs.
只是为了补充 Pop Catalin 的答案,这里有一个单行,它可以关闭计算机而不显示任何窗口:
Just to add to Pop Catalin's answer, here's a one liner which shuts down the computer without displaying any windows:
您可以启动关闭过程:
shutdown -s -t 0
- 关闭shutdown -r -t 0
- 重新启动You can launch the shutdown process:
shutdown -s -t 0
- Shutdownshutdown -r -t 0
- Restart我在尝试使用上面接受的 WMI 方法时遇到了麻烦,因为尽管以管理员身份运行程序,但我总是获得特权而不保留异常。
解决方案是让进程为自己请求特权。 我在 http://www.dotnet247.com/247reference/msgs/ 找到了答案58/292150.aspx 由一个叫 Richard Hill 的人编写。
我在下面粘贴了他的解决方案的基本用法,以防链接变旧。
I had trouble trying to use the WMI method accepted above because i always got privilige not held exceptions despite running the program as an administrator.
The solution was for the process to request the privilege for itself. I found the answer at http://www.dotnet247.com/247reference/msgs/58/292150.aspx written by a guy called Richard Hill.
I've pasted my basic use of his solution below in case that link gets old.
我尝试roomaroo的WMI方法来关闭Windows 2003 Server ,但在我添加“[STAThread]”(即“单线程公寓"线程模型)到 Main() 声明:
然后我尝试从一个线程关闭,为了让它工作,我必须设置该线程的“公寓状态” STA 线程:
我是一个 C# 菜鸟,所以我不完全确定 STA 线程在关闭系统方面的重要性(即使在阅读了我上面发布的链接之后)。 也许其他人可以详细说明...?
I tried roomaroo's WMI method to shutdown Windows 2003 Server, but it would not work until I added `[STAThread]' (i.e. "Single Threaded Apartment" threading model) to the Main() declaration:
I then tried to shutdown from a thread, and to get that to work I had to set the "Apartment State" of the thread to STA as well:
I'm a C# noob, so I'm not entirely sure of the significance of STA threads in terms of shutting down the system (even after reading the link I posted above). Perhaps someone else can elaborate...?
使用关机.exe。 为了避免传递参数、复杂执行的问题,从 WindowForms 执行使用 PowerShell 执行脚本:
System.Management.Automation.dll 应安装在操作系统上并在 GAC 中可用。
对不起我的英语不好。
Use shutdown.exe. To avoid problem with passing args, complex execution, execution from WindowForms use PowerShell execute script:
System.Management.Automation.dll should be installed on OS and available in GAC.
Sorry for My english.
对于 Windows 10,我需要添加 /f 选项,以便在没有任何问题和等待时间的情况下关闭电脑。
For Windows 10, I needed to add /f option in order to shutdown the pc without any question and wait time.
如果您想远程关闭计算机,则可以使用
任何按钮单击
If you want to shut down computer remotely then you can use
on any button click
.net 没有用于关闭计算机的本机方法。 您需要 P/Invoke ExitWindows 或 ExitWindowsEx API 调用。
There is no .net native method for shutting off the computer. You need to P/Invoke the ExitWindows or ExitWindowsEx API call.
从 Windows XP 开始工作,在 win 2000 或更低版本中不可用:
这是最快的方法:
否则像其他人所说的那样使用 P/Invoke 或 WMI。
编辑:如何避免创建窗口
Works starting with windows XP, not available in win 2000 or lower:
This is the quickest way to do it:
Otherwise use P/Invoke or WMI like others have said.
Edit: how to avoid creating a window