该文件是否是C:\windows\system32\shutdown.exe
关闭或重新启动 Windows 所必需的?
答案1
你的问题当然源于你的回答https://codegolf.stackexchange.com/a/24011/18907,特别是来自kinokijuf
对你答案的初步修改的评论。
如上所述kinokijuf
,Windows 不是 Unix。在 Unix 和 Linux 上,shutdown
确实参与了完全关机过程。它是定期向登录用户发送警告消息并/run/nologin
在预定关机时间前不久写入文件以防止进一步登录的程序。
在 Windows NT 上,情况并非如此。
Windows 资源管理器开始菜单上“电源按钮”上的“关机”操作、任务管理器、REBOOT /S
TCC 或 Take Command 中的“关机”菜单选项以及允许您关闭系统的其他应用程序都通过直接调用两个 Win32 API 调用之一来启动关机:InitiateSystemShutdownEx()
或ExitWindowsEx()
。它们不会通过运行shutdown
程序来间接执行操作。(这实际上需要比调用 Win32 API 调用更多的代码。)shutdown
当程序执行本地关机时,也会调用相同的 Win32 API 调用。
winlogon
实际上,是csrss
、和smss
是关闭 Windows NT 的程序。具体来说,是winlogon
负责处理延迟关机请求的主要工作。
进一步阅读
- 乔纳森·德·博因·波拉德(2006年)。Windows NT 6 关机过程. 常见问题答案。
shutdown
。 FreeBSD 9.2 手册页。 2013-03-19。shutdown
。systemd
手册页。 2013.Freedesktop.org。shutdown
。upstart
手册页.2009.Canonical 有限公司InitiateSystemShutdownEx
. MSDN。微软公司。ExitWindowsEx
. MSDN。微软公司。REBOOT
. 采取命令/TCC 帮助。JP 软件。
答案2
不。
当您从“开始”菜单关闭时,Explorer 不会调用此命令。
可以使用 Win32 API 调用关闭系统(如果感兴趣的话,@JdeBP 的回答提供了有关此内容的详细信息)。该命令只是一种从脚本、计划任务或运行对话框中执行此操作的便捷方法。
答案3
正如 ultrasawblade (赞成) 所解释的,系统关闭是一个 Win32 API 调用: 退出WindowsEx
该链接还提供了有关如何从 C 实现关闭的示例。此外,您还可以使用 P/Invoke(平台调用)从 C# 执行此操作。pinvoke.net 有许多可用的签名:http://www.pinvoke.net/default.aspx/user32/exitwindowsex.html
答案4
没有必要。shutdown.exe
只是一个用于关闭本地或远程计算机的实用程序。它看起来shutdown.exe
使用本机 APINative API的NtShutdownsystem
. 虽然 Windows 使用ExitWindowsEx
(正如前面提到的)。