Erwin.Ried.cl / Documentos / Windows /
La misteriosa dilación del apagado de Windows

Generalmente apago escasas veces mi equipo de escritorio, aunque no lo esté usando prefiero dejarlo en estado de suspensión o hibernación. Recientemente descubrí una demora de casi un minuto al apagarlo, lo que me pareció muy extraño... ¿cuál será el motivo de esta demora? ¿cómo solucionarlo? ¿quieres optimizar el apagado de tu equipo también? (20/12/2006 12:55 AM)


Digo recientemente pues probablemente dejé pasar esta situación algún tiempo debido a que no la tomé en cuenta. Al apagar escasamente una vez el equipo cada mes aproximadamente estos factores no se toman en cuenta, aunque claramente ahora que lo tengo presente debo reparlo.


1. Problemas y soluciones comunes, incluyendo el encendido

Hay muchos factores que pueden afectar el inicio o apagado del sistema y como con este documento pretendo crear una pequeña guía para estos problemas enumeraré los problemas y soluciones más comunes.

La demora se produce:

A) Situación: Entre cuando se pulsa el botón de encendido del equipo hasta que comienza la carga de Windows:



Diagnóstico: Hardware problemático, comúnmente puede ser una unidad óptica o un disco rígido con problemas para finalizar sus rutinas de comprobaciones iniciales. Intenta buscar la unidad defectuosa desconectándola, si la unidad es relativamente nueva intenta buscar una actualización del firmware y posiblemente una actualización para la BIOS de tu equipo.

Consejo
Desactiva la búsqueda de unidades al inicio, desde el panel de configuración de tu BIOS (Setup) o intenta colocar tu disco duro primario en primer lugar.


B) Situación: Desde que comienza la carga de Windows hasta que muestra la pantalla de bienvenida:



Diagnóstico 1: Hardware problemático, si notas que la animación de progreso de la pantalla de inicio de Windows (bootgui) tiene saltos y retrasos, el problema se debe a controladores como los de tu placa madre (IDE, BUS, etc)

Diagnóstico 2: Sobrecarga de software, hay servicios y tareas (del programador de tareas) de Windows que pueden invocarse antes de iniciar la sesión del usuario. (¿Cómo optimizar los servicios y aplicaciones del inicio de Windows?)

C) Situación: Desde la pantalla de bienvenida hasta que el computador está listo para ser utilizado (en el escritorio):



Diagnóstico: Sobrecarga de software, hay multiples aplicaciones que tienden a cargarse completamente o parcialmente al inicio para "estar preparados para su uso" o realizar otras acciones que no siempre son tan importantes como para estar utilizando recursos contínuamente. (¿Cómo optimizar los servicios y aplicaciones del inicio de Windows?)

D) Situación: Desde que seleccionas apagar, hasta que realmente se apaga:



Diagnóstico: Sobrecarga de software, hay aplicaciones que no finalizan sus procesos adecuadamente y hacen que Windows deba esperar por ellas más tiempo. Como los otros puntos tienen una solución relativamente simple, este artículo se centra en lograr solucionar la demora del apagado de Windows, en donde generalmente la única solución es quitar la aplicación que provoca el problema.


2. Diagnóstico del apagado

Una manera sencilla de diagnosticar los problemas de apagado es simplemente cerrando ciertos procesos y probar si se soluciona el problema.

En mi caso, mentalmente tengo el siguiente plan de trabajo:

-Verificar que la demora se produce con el equipo recién encendido
-Ahora comprobar que mis servicios comunes no son los que generan el problema, antivirus y otras aplicaciones residentes en la barra de notificación
-Finalmente comprobar que los servicios no son los que generan el problema

Si en los primeros puntos no logramos encontrar el motivo de la demora, es seguro que un servicio es el culpable:

a) Inicio, ejecutar: services.msc
b) Ordenar los servicios por "estado" y buscar los servicios que parezcan no ser originales del equipo, detenerlos y comprobar que el apagado sea expedito

Como el diagnóstico depende de diversas variables es muy dificil dar una solución única, personalmente noté que extrañamente al tener conectada una pequeña tableta digitalizadora Genius WizardPen 5x4 la demora del apagado aparecía.

Esta tableta Genius cuenta con un servicio llamado WinTab Service que espera a que la misma sea conectada para cargar el controlador que permite, entre otras cosas, personalizar funciones de la tableta. En la misma lista de servicios, encontré que el servicio en sí era el ejecutable "WtSrv.exe".


3. Como siempre, un pequeño código salva el día

Buscando en mi carpeta de proyectos, agarré el código de Una llave para proteger tu equipo y utilizando la misma función encargada de cerrar procesos, con unos pequeños retoques sirve para otra ocasión:

Código:
Private Function CloseAPP_B(AppNameOfExe As String)
On Error Resume Next
Dim oProcList As Object
Dim oWMI As Object
Dim oProc As Object

' step 1: create WMI object instance:
Set oWMI = GetObject("winmgmts:")
If IsNull(oWMI) = False Then
' step 2: create object collection of Win32 processes:
Set oProcList = oWMI.InstancesOf("win32_process")
' step 3: iterate through the enumerated collection:
For Each oProc In oProcList
' option to close a process:
If UCase(oProc.Description) = UCase(AppNameOfExe) Then
oProc.Terminate (0)
End If 'IsNull(oWMI) = False
Next 'oProc In oProcList
Else 'IsNull(oWMI) = False
'report error
End If 'IsNull(oWMI) = False
' step 4: close log file; clear out the objects:
Set oProcList = Nothing
Set oWMI = Nothing
End Function


De una manera mucho más trivial la llamamos con la lista leída del archivo inicial:

Código:
Private Sub Form_Load()
On Error Resume Next

Dim myFile As Integer
Dim temp As String
myFile = FreeFile

Open App.EXEName & ".ini" For Input As myFile

While Not EOF(myFile)
Input #myFile, temp
temp = Trim(temp)
If Len(temp) > 1 Then CloseAPP_B temp
DoEvents
Wend

Close myFile
End

End Sub


Entonces un minúsculo ejecutable permite cerrar rápidamente una lista de procesos determinados en una lista.


4. ¿Pero porqué Windows no hace bien el trabajo?

Windows amablemente le pide que finalice y espera por su acción. Dependiendo de la situación si pasado un tiempo determinado la aplicación sigue sin responder al mensaje, se informa al usuario o en un caso de cierre del sistema simplemente se finaliza el proceso (provocando la demora en el apagado mismo, en situaciones extremas puede llegar a varios minutos).

Este método de "solicitar" el cierre se debe hacer para proporcionar al programador de la aplicación control sobre las acciones que se deben efectuar para cerrar de forma satisfactoria su programa, por ejemplo preguntarle al usuario si desea guardar los cambios o simplemente finalizar correctamente las diversas conecciones con dispositivos y procesos.

La pequeña aplicación presentada acá simplemente intenta "matar" el proceso sin esperar su respuesta, pues supuestamente sabemos que esperarla retrasaría, en este caso, el apagado. Lo ideal es que el desarrollador actualizara la aplicación, sin embargo esto no siempre sucede y especialmente en mi caso en donde el controlador de la tableta digitalizadora lleva bastante tiempo sin ser actualizado.

Un punto importante es que una conocida solución consiste en cambiar los tiempos de espera (para aplicaciones que están sin responder) por medio de las algunas claves del registro de Windows, especialmente las referentes a:

Código:
HKEY_CURRENT_USER\Control Panel\Desktop\*timeout


Hacer eso puede ciertamente disminuir algo la demora al cerrar las aplicaciones cuando el equipo está apagándose, sin embargo no hay un valor de "timeout" de estos registros que permita eliminar totalmente los problemas como la solución expuesta por mí, de hecho, con valores de espera muy bajos pueden producirse situaciones problemáticas en donde Windows señala que una aplicación no responde cuando sí está respondiendo.


5. ¿Cómo incorporar esto al apagado?

Luego de identificar los proceso que causa el problema, y colocar estos procesos en la lista del programa que los finaliza, abrimos el editor de políticas de grupo:

Inicio / ejecutar: gpedit.msc

y vamos a Directiva de equipo local / Configuración del equipo / Configuración de Windows / Archivos de comandos / Apagar

Ahora luego de presionar el botón "Mostrar archivos", copiamos "shutdown.exe" y su archivo de inicio "shutdown.ini":



Finalmente agregamos el ejecutable a la lista de comandos desde el editor de políticas de grupo:



Esta operación genera un archivo "\System32\GroupPolicy\Machine\Scripts\scripts.ini" el cual es leído en las operaciones de encendido y apagado del sistema.

De esta forma cada vez que apaguemos el equipo, se invoca primero "shutdown.exe", el cual finaliza los procesos que identificamos como los que atrasan el apagado y a continuación apaga el equipo.

Con estas opciones aparecerá un mensaje al apagado de "ejecutando secuencias de apagado..." por unos instantes (lo que refleja la llamada a "shutdown.exe". Este mensaje se puede cambiar, pero esa modificación tendría que ser parte de otro documento, en mi caso como me molestaba, sólo deje el típico mensaje de "Windows se está apagando...".

Para los usuarios de Windows XP Home
Aunque esta versión de Windows no incluye el editor de políticas de grupo, siempre hay una solución posible cerca

Hay que tener en cuenta que la utilización del editor de políticas de grupo puede ser omitida, en el archivo ejecutable se incluye un texto con instrucciones



6. Código fuente y ejecutable

Archivo ejecutable listo para utilizar (4 kb)
files/articles/delayed_shutdown_01/fast_shutdown_bin.rar

Código fuente de la aplicación (2 kb)
files/articles/delayed_shutdown_01/fast_shutdown_source.rar


7. Conclusiones

Pequeñas soluciones para pequeños, pero molestos, problemas nunca faltan, ante la amenaza de programadores descuidados (como los del controlador de mi tableta digitalizadora).

Lo importante es que en la lista no se incluyan aplicaciones sensibles como por ejemplo un editor de documentos, entornos de programación y cosas que puedan causar pérdida de datos al ser cerrados de manera forzada.

Haga clic sobre una de las estrellas para calificar este artículo.

Opiniones y comentarios (Escribir un nuevo comentario)
Hola, quisiera hacerte una pregunta: mi pc es win xp, 2gbram core 2duo 1gb la tarjeta de video etc, El problema que tego es el sgte: al encenderla, se esta haciendo comun que se tranca la barra de progreso y tengo que volver a reiniciarla apretando el boton para ello, desde el kaise o keise(no se como se escribe), que puede ser este problema? y como puedo solucionarlo?. Gracias
Escrito por Ramiro (24/06/2009 02:04 AM)
Puede deberse a muchos motivos, si quieres me mandas mas detalles del problema a mi correo para intentar ayudarte
Escrito por Erwin Ried (27/06/2009 08:27 PM)
Tu sabes mucho mas que yo sobre Windows, y quien sabe cuantas cosas mas, pero ¿has pensado en el comando de Windows shutdown -t 00 -f -s? La f es para forzar el cerrado de las aplicaciones sin advertencias. ¿En que se diferencia del metodo que propones?
Escrito por klazerver (18/09/2007 01:26 PM)
En la práctica es lo mismo, sin embargo ese comando cierra todas las aplicaciones (yo generalmente olvido de guardar algún bloc de notas) y adicionalmente requiere cambiar nuestra rutina normal de apagado (presionar el botón de apagado o desde el menú inicio)
Escrito por Erwin Ried (18/09/2007 01:57 PM)
"La pantalla de inicio de Windows (bootgui) tiene saltos y retrasos, el problema se debe a controladores como los de tu placa madre (IDE, BUS, etc)." Después de graves problemas con Windows, me ocurre eso. No sé qué puedo hacer ni entiendo nada de eso. Gracias.
Escrito por Álvaro (04/01/2007 10:42 AM)
Me refiero a que revises la página del fabricante de tu placa madre y descargues los controladores más actualizados. Generalmente el problema termina ahí, con los controladores del disco duro. Si tu equipo se cuelga constantemente el problema puede ser de hardware y en especial la memoria ram, lo que quitaría la culpa de los controladores si el retraso al inicio se produce solamente luego de un cuelgue
Escrito por Erwin Ried (05/01/2007 01:09 AM)

Copyright © 2013 por Erwin Ried.