lunes, 4 de julio de 2011

Desinstalar programas en windows usando python

Buscando una solución en Python para automatizar la desinstalación de programas en Windows me encontré con este post donde el autor comparte algunas funciones para leer datos del registro de Windows, después me encontré con este artículo de Microsoft donde podemos ver que Windows guarda en el registro los datos para desinstalar aplicaciones específicamente en:
HKLM/SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
Con la sorpresa de que la mayoría de los instaladores agregan una llave en el registro que se llama uninstallstring, esta llave es tal cual la línea de comandos que ejecutará para desinstalar el programa en cuestión.
Ya puesto todo junto el script:
Requerimientos
el módulo wmi(que permite administrar windows) para python
Y ya, el otro módulo viene incluido en la librería estandar de python desde 2.4
Para este código supongamos que queremos desinstalar todos los programas de Adobe
Tomamos las funciones que nos hizo favor de compartir Thejaswi Raya


Podemos utilizarlas para ver una lista de todos los programas instalados asi


Y luego si quisieramos guardar las uninstallstrings para poder usarlas después las guardamos en una lista modificando el código anterior asi:



Después podemos iterar sobre esa lista de strings ejecutando cada una asi:


Según la documentación oficial y la comunidad no deberíamos usar system.os(comando) para ejecutar cosas, está depreciado sin embargo la alternativa propuesta del módulo subprocess, Popen(comando) no bloquea nuestro script usualmente es lo que queremos, que el código siga ejecutando una vez se dispare nuestro comando de sistema, sin embargo en este caso no, porque los desinstaladores necesitan ser únicos, surgen errores si mas de un desinstalador intenta ejecutarse al mismo tiempo por lo que en este caso necesitamos esperar a que el desinstalador acabe, osea regrese algún código de error a system.os() para que se ejecute el siguiente.



Averiguando mas sobre el tema me entere de que algunos programas implementan una clave adicional que se llama QuietUninstallString que nos ahorraría el problema de los desinstaladores que necesitan clicks, no se que tan común sea esta clave pero me temo que no mucho, en todo caso podemos automatizar los clicks usando el fabuloso proyecto
Sikulli

cheers!

No hay comentarios:

Publicar un comentario