Shutdown desde Java en sistemas Windows - Más allá de lo que ves

jueves, 28 de mayo de 2009

Shutdown desde Java en sistemas Windows

Buenas de nuevo.

Hace tiempo escribí en una entrada la forma de apagar windows desde una aplicación Java usando JWSF, una librería que se encuentra en sourceforge.

Como no podía ser de otra forma la librería no nos ha rulado bien en uno de los guindos, concretamente en Windows 2000 Server, así pues hemos tenido que indagar algo más y hemos dado con una opción que ha funcionado en xp, 2000, 2003 y vista usando un pequeño fragmento escrito en VBS y llamándalo con:

Runtime.getRuntime().exec("wscript wshutdown.vbs");

El prefijo wscript hace que no se abra ninguna ventana de consola al ejecutar el script.

El fragmento del script que nos interesa tiene el contenido:

Set wmi = GetObject("winmgmts:{(Shutdown)}")
Set objSet = Wmi.InstancesOf("win32_operatingsystem")
For Each obj In objSet
set os = obj : exit for
Next

os.win32shutdown (6)

Donde el parámetro que se le envía al método win32shutdown establece la acción que queremos ejecutar con los siguientes valores:

0 = Log Off
4 = Forced Log Off
1 = Shutdown
5 = Forced Shutdown
2 = Reboot
6 = Forced Reboot
8 = Power Off
12 = Forced Power Off

Espero que os pueda ser útil.

Un salute.

3 comentarios:

  1. Muchas gracias por la info ;D. Abres una puerta muy interesante. wscript es el interprete de scripts de "Windows Scripting Host", que permite extender java de una forma secilla y acceder a esa funcionalidad del sistema que pueden ser muy engorrosa desde Java. Por ejemplo: crear shortcuts, ver los procesos que están correndo, enviar eventos al sistema. Por cierto, puedes usar javascript en los script que estoy seguro que te va a gustar mucho más.
    Un abrazo.

    ResponderEliminar
  2. Jesús has metido el comentario en la entrada de Java no en la tuya. No pasa nada.

    Se que es de Madona, por las pistas que has dejado y gracias a San Google.

    :)

    ResponderEliminar