Нужен ли файл C:\windows\system32\shutdown.exe
для выключения или перезапуска Windows?
shutdown -s -t 0
- на обычном языке shutdown
отображается только справка.
Нужен ли файл C:\windows\system32\shutdown.exe
для выключения или перезапуска Windows?
shutdown -s -t 0
- на обычном языке shutdown
отображается только справка.
Ответы:
Ваш вопрос, конечно же, исходит из вашего ответа на https://codegolf.stackexchange.com/a/24011/18907 , в частности, из kinokijuf
комментариев, сделанных при первоначальной редакции вашего ответа.
Как kinokijuf
сказано, Windows не является Unix. На Unices и Linux shutdown
действительно участвует в процессе полного выключения. Это программа, которая отправляет регулярные предупреждающие сообщения зарегистрированным пользователям и записывает /run/nologin
файл, чтобы предотвратить дальнейший вход в систему незадолго до запланированного времени завершения работы.
В Windows NT это не так.
Действие «Завершение работы» над «кнопкой питания» в меню «Пуск» проводника Windows, пункт меню «Завершение работы» в диспетчере задач, REBOOT /S
в TCC или «Взять команду», а также в других прикладных программах, которые позволяют выключить систему, все инициируют завершение работы. путем прямого вызова одного из двух вызовов Win32 API: InitiateSystemShutdownEx()
или ExitWindowsEx()
. Они не делают вещи косвенно, запустив shutdown
программу. (На самом деле для этого требуется больше кода, чем просто вызов API Win32.) shutdown
Программа, когда выполняется локальное завершение, также вызывает те же вызовы Win32 API.
Это на самом деле winlogon
, csrss
и smss
это программы, которые закрывают Windows NT. В частности, именно он winlogon
выполняет основную работу по обработке отложенных запросов на отключение.
shutdown
, Руководства по FreeBSD 9.2 . 2013-03-19.shutdown
, systemd
справочные страницы . 2013. Freedesktop.org.shutdown
, upstart
справочные страницы . 2009. Canonical Ltd.InitiateSystemShutdownEx
, MSDN. Корпорация Майкрософт.ExitWindowsEx
, MSDN. Корпорация Майкрософт.REBOOT
, Возьмите Command / TCC Help. JP Software.shutdown
команда вообще не участвует в процессе полного выключения; в то время как он может отправлять предупреждающие сообщения или касаться / запускать / nologin, все, что он делает в отношении фактического выключения, - это отправляет соответствующую команду systemd, init и т. д. и завершает работу. Процесс init или его современная замена systemd фактически выполняет работу по выключению системы.
shutdown
находятся прямо перед вами. Думать, что это так же неправильно, как бессмыслица во введении к Linux в TLDP, где говорится, что «UNIX не предназначен для выключения». UNIX действительно был сделан для закрытия, и за последние 40 лет было довольно много книг для профессионалов UNIX, которые охватывают всю процедуру, с предупреждениями для пользователей как шаг # 1.
shutdown
на странице 22, но его нет в моей библиотеке. Извините, М. Смит. (-: Моя библиотека имеет такие же характеристики, как Coffin SVR5 Reference (шаг предупреждений пользователей, описанный на страницах 355 и 683), Руководство системного администратора SCO UNIX (предупреждения пользователям как первый шаг завершения работы на страницах 52–53) и даже Fielder's / Администрирование системы Hunter UNIX (вся глава 6 посвящена отключению, с предупреждением пользователей в начале главы). Можно найти еще много книг для профессионалов, посвященных этой
Нет.
Explorer не вызывает эту команду, когда вы закрываете меню «Пуск».
Завершение работы системы возможно с помощью вызова Win32 API (ответ @ JdeBP содержит подробную информацию об этом, если интересно). Команда - это просто удобный способ сделать это из сценария, запланированного задания или диалога «Выполнить».
shutdown.exe
даже не делает изящное отключение.
shutdown
этом, сделанного спрашивающим первоначально. (Эти части) установщиков часто пишутся на скомпилированных языках, которые, кстати, просто вызывают Win32 API.
Как пояснил ultrasawblade (upvote), выключение системы - это вызов Win32 API для: ExitWindowsEx
В ссылке также есть пример того, как осуществить отключение из C. Кроме того, вы можете сделать это из C # с помощью P / Invoke (Platform Invoke). У pinvoke.net есть набор подписей, доступных для использования: http://www.pinvoke.net/default.aspx/user32/exitwindowsex.html
Это не обязательно. shutdown.exe
это просто утилита для выключения локального или удаленного компьютера. Похоже , shutdown.exe
ИСПОЛЬЗУЕТ Native API «S NtShutdownsystem
. Пока Windows использует ExitWindowsEx
( как уже упоминалось ).