关闭Windows是否需要shutdown.exe?


36

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


16
尝试将其重命名为其他名称,然后查看。
martineau 2014年

10
@MukulKumar有人想找出效果,并且知道他们可以很容易地将其逆转吗?
乔恩·本特利

8
@theGreenCabbage:您需要发出shutdown -s -t 0-平原shutdown仅显示帮助。
LawrenceC

9
拔掉计算机的电源,无论文件名如何,都应将其关闭。
David Starkey 2014年

7
@DavidStarkey:“关闭”和“关闭”不是同一回事。
与莫妮卡(Monica)

Answers:


31

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

如前所述kinokijuf,Windows不是Unix。在Unices和Linux上,shutdown确实参与了完整的关闭过程。该程序会向登录的用户发送常规警告消息,并写入/run/nologin文件以防止在计划的关闭时间之前的很短时间内再次登录。

在Windows NT上不是这种情况。

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

实际上是winlogoncsrss并且smss是关闭Windows NT的程序。特别是winlogon处理延迟关闭请求的主要工作。

进一步阅读


1
您确实是一个明智的回答者!我喜欢您通过我的个人资料追溯真实情况的方式。
Mukul Kumar 2014年

请注意,在Linux系统上,该shutdown命令完全不参与完整的关闭过程。尽管它可能会发送警告消息或触摸/ run / nologin,但实际上关闭它所做的只是将适当的命令发送到systemd,init等,然后退出。初始化过程或它的现代替代系统实际上完成了关闭系统的工作。
迈克尔·汉普顿

不,汉普顿先生,发送消息并停止登录是完全关闭过程的完整部分。不要以为Linux已经神奇地消失了。两个Linux shutdown的手册页就在您的面前。认为这与TLDP的Linux简介中的废话一样是错误的,它说“不要关闭UNIX”。确实确实要关闭UNIX,并且在过去40年中,UNIX专业人员有很多书籍介绍了整个过程,并向用户发出了警告消息,作为第一步。
JdeBP 2014年

甚至还有针对Linux专业人员的书籍。我会插入Rod Smith的LPIC学习指南,该指南shutdown在第22页上找到,但是它不在我的书架中。抱歉,史密斯先生。(-:我的库具有Coffin的SVR5参考(警告用户步骤在355和683页上进行了说明),SCO UNIX系统管理员指南(警告用户作为关闭的第一步在52-53页上进行警告),甚至是Fielder / Hunter的UNIX系统管理(第6章中的整个内容都是有关关机的,在本章的开头有警告用户),您可以找到很多有关此问题的专业书籍
。– JdeBP 2014年

55

没有。

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

可以通过Win32 API调用来关闭系统(@JdeBP的答案提供了有关此问题的详细信息)。该命令只是从脚本,计划任务或“运行”对话框中执行命令的便捷方式。


实际上,shutdown.exe甚至都无法正常关机。
kinokijuf 2014年

小心那个答案!资源管理器不会调用该命令,但是其他关闭或重新启动Windows的进程会执行此操作:如果脚本或计划任务是系统管理员的安装程序或计划维护任务,则不仅仅是“一种便捷的方式”。
Nigel Heffernan 2014年

1
尼罗河,这并不需要“必要”。请参阅问题的上下文(不是问题中的内容,而是我的答案以及所指出的内容),以了解提问者正在提问的反驳,以及有关shutdown提问者最初所作的陈述。(安装程序的这些部分)安装程序通常用编译后的语言编写,这些语言仅调用Win32 API。
JdeBP 2014年

8

如ultrasawblade(更新)所述,系统关闭是Win32 API调用: ExitWindowsEx

该链接还提供了有关如何从C实现关机的示例。此外,您还可以使用P / Invoke(平台调用)从C#中进行关闭。pinvoke.net有很多可用的签名:http ://www.pinvoke.net/default.aspx/user32/exitwindowsex.html


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.