¿Es necesario shutdown.exe para apagar Windows?

36

¿Es C:\windows\system32\shutdown.exenecesario el archivo para apagar o reiniciar Windows?

Mukul Kumar
fuente
16
Intente cambiarle el nombre a otra cosa y vea.
Martineau
10
@MukulKumar ¿Alguien que quiere descubrir el efecto y sabe que puede revertirlo fácilmente?
Jon Bentley
8
@theGreenCabbage: necesita emitir shutdown -s -t 0, un plano shutdownsolo muestra ayuda.
LawrenceC
99
Desenchufar la computadora debería apagarla, independientemente del nombre de cualquier archivo.
David Starkey
77
@DavidStarkey: Sin embargo, "apagar" y "apagar" no son lo mismo.
Lightness compite con Monica el

Respuestas:

31

Su pregunta, por supuesto, se origina en su respuesta en https://codegolf.stackexchange.com/a/24011/18907 , en particular en kinokijufel comentario de la revisión inicial de su respuesta.

Como se kinokijufdijo, Windows no es Unix. En Unices y Linux, de shutdownhecho está involucrado en el proceso de apagado completo. Es el programa que envía mensajes de advertencia regulares a los usuarios que han iniciado sesión y que escribe el /run/nologinarchivo para evitar un mayor inicio de sesión un poco antes del tiempo de apagado programado.

En Windows NT, este no es el caso.

La acción "Apagar" en el "botón de encendido" en el menú de inicio del Explorador de Windows, la opción de menú "Apagar" en el Administrador de tareas, REBOOT /Sen TCC o Tomar comando, y otros programas de aplicaciones que le permiten apagar el sistema. llamando directamente a una de las dos llamadas a la API Win32: InitiateSystemShutdownEx()o ExitWindowsEx(). No hacen cosas indirectamente al ejecutar el shutdownprograma. (Eso realmente necesita más código que hacer que simplemente llamar a la llamada a la API de Win32). El shutdownprograma, cuando se realiza un apagado local, también llama a esas mismas llamadas a la API de Win32.

En realidad winlogon, csrssy smssesos son los programas que cierran Windows NT. En particular, es lo winlogonque hace el trabajo principal de procesar las solicitudes de apagado diferido.

Otras lecturas

JdeBP
fuente
1
¡Eres realmente un respondedor sensato! Me gustó la forma en que te remontaste a la situación real a través de mi perfil.
Mukul Kumar
Tenga en cuenta que en los sistemas Linux, el shutdowncomando no participa en absoluto en el proceso de apagado completo; Si bien puede enviar mensajes de advertencia o tocar / ejecutar / nologin, todo lo que hace con respecto al apagado real es enviar el comando apropiado a systemd, init, etc., y salir. El proceso init o su sistema de reemplazo moderno realmente hace el trabajo de apagar el sistema.
Michael Hampton
No, M. Hampton, enviar los mensajes y detener los inicios de sesión es una parte completa del procedimiento de apagado completo. No pienses que mágicamente se ha ido con Linux. Las páginas del manual para dos Linux shutdownestán justo en frente de usted. Pensar que es tan incorrecto como el sinsentido en la Introducción a Linux en TLDP que dice que "UNIX no está hecho para ser cerrado". De hecho, UNIX se cerró, y hay muchos libros en los últimos 40 años para profesionales de UNIX que cubren el procedimiento completo, con mensajes de advertencia a los usuarios como paso # 1.
JdeBP
Incluso hay libros para profesionales de Linux. Conectaría la Guía de estudio LPIC de Rod Smith , que se encuentra shutdownen la página 22, pero no está en mi biblioteca. Lo siento, M. Smith. (-: Mi biblioteca tiene los gustos de la Referencia SVR5 de Coffin (el paso de advertencia de los usuarios descrito en las páginas 355 y 683), una Guía del administrador del sistema SCO UNIX (advertencias a los usuarios como primer paso de cierre en las páginas 52–53), e incluso Fielder / cazador de administración de sistemas UNIX (todo el capítulo 6 está a punto de parada, con la advertencia a los usuarios al comienzo del capítulo) Uno puede encontrar muchos más libros para los profesionales que cubre esto..
JdeBP
55

No.

Explorer no llama a este comando cuando cierra desde el menú Inicio.

Es posible apagar el sistema con una llamada a la API Win32 (la respuesta de @ JdeBP proporciona grandes detalles al respecto si está interesado). El comando es solo una forma conveniente de hacerlo desde un script, una tarea programada o el cuadro de diálogo Ejecutar.

LawrenceC
fuente
En realidad, shutdown.exeni siquiera hace un cierre elegante.
kinokijuf
¡Cuidado con esa respuesta! Explorer no llama a ese comando, pero otros procesos que cierran o reinician Windows sí lo hacen: y no es solo 'una forma conveniente de hacerlo' si el script o la tarea programada es un instalador o una tarea de mantenimiento programada de su administrador de sistemas.
Nigel Heffernan
1
Eso no lo hace "necesario", Nilo. Vea el contexto de la pregunta (que no está en la pregunta, pero está en mi respuesta y en lo que se señala allí) para ver la refutación que el interrogador estaba cuestionando, y la declaración acerca de shutdownque el interrogador hizo originalmente. (Estas partes de) los instaladores a menudo se escriben en lenguajes compilados que solo llaman a la API Win32, por cierto.
JdeBP
8

Según lo explicado por ultrasawblade (upvote), el apagado del sistema es una llamada de la API Win32 a: ExitWindowsEx

El enlace también tiene un ejemplo sobre cómo implementar un apagado desde C. Además, puede hacerlo desde C # usando P / Invoke (invocación de plataforma). pinvoke.net tiene un montón de firmas disponibles para su uso: http://www.pinvoke.net/default.aspx/user32/exitwindowsex.html

thepip3r
fuente