Чи потрібен 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 або Take Command та інших прикладних програмах, які дозволяють вимкнути систему з усіх ініційованих вимкнень. шляхом безпосереднього виклику одного з двох викликів Win32 API: InitiateSystemShutdownEx()або ExitWindowsEx(). Вони не роблять справи опосередковано, запускаючи shutdownпрограму. (Насправді для цього потрібно більше коду, ніж просто виклик виклику API Win32.) shutdownПрограма, коли робиться локальне відключення, також викликає ті самі дзвінки API Win32.

Це насправді winlogon, csrssі smssце програми, які вимикають Windows NT. Зокрема, саме winlogonця робота полягає в обробці відкладених запитів на закриття.

Подальше читання

  • Джонатан де Бойне Поллард (2006). Процес відключення Windows NT 6 . Часто дані відповіді.
  • shutdown. Сторінки керівництва FreeBSD 9.2 . 2013-03-19.
  • shutdown. systemdсторінки посібника . 2013. Freedesktop.org.
  • shutdown. upstartсторінки посібника . 2009. Canonical Ltd.
  • InitiateSystemShutdownEx. MSDN. Корпорація Microsoft.
  • ExitWindowsEx. MSDN. Корпорація Microsoft.
  • REBOOT. Візьміть довідку Command / TCC. Програмне забезпечення JP.

1
Ви справді розумний відповідач! Мені сподобалось те, як ти простежив реальну ситуацію через мій профіль.
Мукул Кумар

Зауважте, що в системах Linux shutdownкоманда зовсім не бере участь у повному процесі відключення; в той час як він може надсилати попереджувальні повідомлення або торкатися / запускати / нологін, все, що він робить у відношенні фактичного вимкнення, це надіслати відповідну команду systemd, init тощо та вийти. Процес init або його сучасний замінник systemd фактично спрацьовує з вимкнення системи.
Майкл Хемптон

Ні, М. Хемптон, надсилання повідомлень та зупинка логотипів є повноцінною частиною повної процедури закриття. Не думайте, що це магічно пішло з Linux. Сторінки керівництва для двох Linux shutdownє прямо перед вами. Думаючи, що це так само неправильно, як дурниці у Вступі до Linux на TLDP, де сказано, що "UNIX не зроблений для того, щоб його закривали". Програму UNIX справді було закрито, і за останні 40 років існує досить багато книг для професіоналів UNIX, які охоплюють повну процедуру, з попереджуючими повідомленнями для користувачів як крок №1.
JdeBP

Є навіть книги для професіоналів Linux. Я б підключив посібник з вивчення LPIC для Род Сміта , який є shutdownна сторінці 22, але його немає в моїй бібліотеці. Вибачте, Сміт. (-: Моя бібліотека має подібні довідки SVR5 Coffin ( етап попередження користувачів, описаний на сторінках 355 та 683), керівництво системного адміністратора SCO UNIX (попереджає користувачів як перший крок відключення на сторінках 52–53) і навіть Fielder's / Система адміністрування UNIX системи Hunter (у всьому розділі 6 йдеться про вимкнення, попередження користувачів на початку розділу). Можна знайти ще багато книг для професіоналів, які висвітлюють це.
JdeBP

55

Ні.

Провідник не викликає цю команду, коли ви вимикаєтесь із меню "Пуск"

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


Насправді shutdown.exeнавіть не робить витонченого відключення.
kinokijuf

Обережно з цією відповіддю! Провідник не викликає цю команду, але це роблять інші процеси, які закривають або перезапускають вікна: і це не просто "зручний спосіб зробити це", якщо сценарій або заплановане завдання є встановником або плановим завданням технічного обслуговування від вашого sysadmin.
Найджел Геффернан

1
Це не робить його "необхідним", Ніл. Дивіться контекст запитання (яке не в питанні, але є моєю відповіддю і на що вказується там) для спростування, яке запитував запитуючий, і твердження про це, shutdownяке запитуючий спочатку робив. (Ці частини) інсталятори часто записуються компільованими мовами, які просто викликають API Win32, до речі.
JdeBP

8

Як пояснив ultrasawblade (upvote), відключення системи - це виклик Win32 API для: ExitWindowsEx

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


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.