关闭Windows是否需要shutdown.exe?

Muk*_*mar 36 windows

该文件是否C:\windows\system32\shutdown.exe需要关闭或重新启动 Windows?

Law*_*ceC 55

不。

当您从“开始”菜单关闭时,资源管理器不会调用此命令。

可以通过 Win32 API 调用关闭系统(如果有兴趣,@JdeBP 的回答提供了有关此的详细信息)。该命令只是一种从脚本、计划任务或“运行”对话框执行此操作的便捷方式。


Jde*_*eBP 31

您的问题当然源于您在https://codegolf.stackexchange.com/a/24011/18907 上的回答,特别是来自kinokijuf对您的答案的初始修订的评论。

如前所述kinokijuf,Windows 不是 Unix。在Unices 和Linux 上,shutdown确实是参与了完全关机过程。该程序会定期向登录用户发送警告消息,并写入/run/nologin文件以防止在计划关闭时间之前的一小段时间内进一步登录。

在 Windows NT 上,情况并非如此。

Windows资源管理器开始菜单“电源按钮”上的“关机”动作、任务管理器中的“关机”菜单选项、REBOOT /STCC或Take Command中的“关机” ,以及其他允许关闭系统的应用程序都启动关机通过直接调用两个 Win32 API 调用之一:InitiateSystemShutdownEx()ExitWindowsEx(). 他们不会通过运行shutdown程序来间接地做事。(这实际上需要更多的代码来执行,而不仅仅是调用 Win32 API 调用。)该shutdown程序在执行本地关闭时,也会调用相同的 Win32 API 调用。

它实际上是winlogon, csrss, 并且smss那些是关闭 Windows NT 的程序。特别是,它winlogon主要负责处理延迟关闭请求。

进一步阅读


小智 8

正如ultrasawblade(upvote)所解释的那样,系统关闭是一个Win32 API调用: ExitWindowsEx

该链接还有一个关于如何从 C 实现关闭的示例。此外,您可以使用 P/Invoke(平台调用)从 C# 执行此操作。pinvoke.net 有一堆可供使用的签名:http ://www.pinvoke.net/default.aspx/user32/exitwindowsex.html