36

Необходим ли файл C:\windows\system32\shutdown.exe для завершения работы или перезапуска Windows?

4 ответа4

55

Нет.

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

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

31

Ваш вопрос, конечно же, исходит из вашего ответа на https://codegolf.stackexchange.com/a/24011/18907 , в частности из комментария kinokijuf после первоначального пересмотра вашего ответа.

Как сказал kinokijuf , Windows - это не Unix. В Unices и 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 выполняет основную работу по обработке отложенных запросов на отключение.

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

8

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

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

4

Это не обязательно. shutdown.exe - это просто утилита для выключения локального или удаленного компьютера. Похоже, что shutdown.exe использует NtShutdownsystem Native API. Хотя Windows использует ExitWindowsEx (как уже упоминалось).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .