Нужно ли shutdown.exe завершать работу Windows?

36

Нужен ли файл C:\windows\system32\shutdown.exeдля выключения или перезапуска Windows?

Мукул Кумар
источник
16
Попробуйте переименовать это как-нибудь еще и посмотрите.
Мартино
10
@MukulKumar Кто-то, кто хочет узнать эффект, и знает, что они могут очень легко полностью изменить его?
Джон Бентли
8
@theGreenCabbage: Вам нужно оформить shutdown -s -t 0- на обычном языке shutdownотображается только справка.
LawrenceC
9
Отключение компьютера должно отключить его независимо от имени любого файла.
Дэвид Старки
7
@DavidStarkey: «Выключить» и «выключить» это не одно и то же.
Легкость гонок с Моникой

Ответы:

31

Ваш вопрос, конечно же, исходит из вашего ответа на 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выполняет основную работу по обработке отложенных запросов на отключение.

дальнейшее чтение

JdeBP
источник
1
Вы действительно разумный ответчик! Мне понравилось, как ты проследил реальную ситуацию через мой профиль.
Мукул Кумар
Обратите внимание, что в системах Linux shutdownкоманда вообще не участвует в процессе полного выключения; в то время как он может отправлять предупреждающие сообщения или касаться / запускать / nologin, все, что он делает в отношении фактического выключения, - это отправляет соответствующую команду systemd, init и т. д. и завершает работу. Процесс init или его современная замена systemd фактически выполняет работу по выключению системы.
Майкл Хэмптон
Нет, М. Хэмптон, отправка сообщений и прекращение входа в систему - это полноценная часть процедуры полного отключения. Не думайте, что он волшебным образом исчез с Linux. Справочные страницы для двух Linux shutdownнаходятся прямо перед вами. Думать, что это так же неправильно, как бессмыслица во введении к Linux в TLDP, где говорится, что «UNIX не предназначен для выключения». UNIX действительно был сделан для закрытия, и за последние 40 лет было довольно много книг для профессионалов UNIX, которые охватывают всю процедуру, с предупреждениями для пользователей как шаг # 1.
JdeBP
Есть даже книги для профессионалов Linux. Я бы подключил учебное пособие Рида Смита по LPIC , которое есть shutdownна странице 22, но его нет в моей библиотеке. Извините, М. Смит. (-: Моя библиотека имеет такие же характеристики, как Coffin SVR5 Reference (шаг предупреждений пользователей, описанный на страницах 355 и 683), Руководство системного администратора SCO UNIX (предупреждения пользователям как первый шаг завершения работы на страницах 52–53) и даже Fielder's / Администрирование системы Hunter UNIX (вся глава 6 посвящена отключению, с предупреждением пользователей в начале главы). Можно найти еще много книг для профессионалов, посвященных этой
теме
55

Нет.

Explorer не вызывает эту команду, когда вы закрываете меню «Пуск».

Завершение работы системы возможно с помощью вызова Win32 API (ответ @ JdeBP содержит подробную информацию об этом, если интересно). Команда - это просто удобный способ сделать это из сценария, запланированного задания или диалога «Выполнить».

LawrenceC
источник
На самом деле, shutdown.exeдаже не делает изящное отключение.
kinokijuf
Осторожнее с этим ответом! Explorer не вызывает эту команду, но другие процессы, которые закрывают или перезагружают окна, делают это: и это не просто «удобный способ сделать это», если сценарий или запланированная задача является установщиком или запланированной задачей обслуживания от вашего системного администратора.
Найджел Хеффернан
1
Это не делает это «необходимым», Нил. См. Контекст вопроса (которого нет в вопросе, но он есть в моем ответе и что там указано) для опровержения, которое задавал спрашивающий, и утверждения об shutdownэтом, сделанного спрашивающим первоначально. (Эти части) установщиков часто пишутся на скомпилированных языках, которые, кстати, просто вызывают Win32 API.
JdeBP
8

Как пояснил ultrasawblade (upvote), выключение системы - это вызов Win32 API для: ExitWindowsEx

В ссылке также есть пример того, как осуществить отключение из C. Кроме того, вы можете сделать это из C # с помощью P / Invoke (Platform Invoke). У pinvoke.net есть набор подписей, доступных для использования: http://www.pinvoke.net/default.aspx/user32/exitwindowsex.html

thepip3r
источник