2010-01-16 35 views
9

He visto numerosas formas de recuperar programas instalados en WinXP + en python. ¿Cuál es la adecuada y más robusta forma de hacer esto?forma "adecuada" y confiable de obtener todos los programas instalados de Windows en Python?

Actualmente estoy accediendo a HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall y leyendo cada una de las claves de allí para obtener una lista. (Me han dicho que esta no es la forma correcta de hacer las cosas ) He visto ejemplos de cómo usar WMI/Win32com para hacer esto también, pero he visto comentarios junto con esas implementaciones de que WMI podría estar apagado en ciertos máquinas y que no es una solución muy confiable.

¿Existe un método que sea apropiado y confiable para obtener una lista de los programas instalados? Ninguno de los ejemplos de WMI que he visto han funcionado en esta máquina (de ahí mi reticencia a usarlo, solo ejecuto WinFLP, que es un vers de XP desprovisto)

Parece que también he encontrado TechNet artículo que mis búsquedas han aparecido y que se proporciona a una respuesta similar en mi pregunta: http://gallery.technet.microsoft.com/ScriptCenter/en-us/154dcae0-57a1-4c6e-8f9f-b215904485b7 Tenga en cuenta que Vista/7 enumerado debajo de Plataformas claramente dice "No" ... no funcionará. Entonces el acuerdo de WMI parece que es un no-go ...

Ser capaz de recuperar la ruta de acceso instalada sería una ventaja, ya que ahora mi código actual no da cuenta de que alguien esté instalando en otra unidad, o en un directorio no predeterminado.

Respuesta

8

La secuencia de comandos de technet a la que se refiere funciona perfectamente en Win 7 (con Python 2.5 32bits), y realmente no puedo ver por qué no debería hacerlo.

En realidad, la verdadera debilidad del enfoque de WMI es que solo enumera los productos instalados a través del instalador de Windows. Entonces no le dará la lista completa. Muchos programas usan diferentes instaladores. Simplemente compare los resultados entre (Seleccione * de Win32_Product) y lo que se muestra en el Panel de control. Entonces, a menos que esté seguro de que el programa que lo interfiere en su lista está instalado con MSI, WMI definitivamente no es una respuesta.

Así que puede que no sea muy pitónico, pero la mejor manera, hasta donde yo sé, es usar el registro como lo has hecho. Esta es en realidad la forma en que funciona el panel de control, por lo que al menos Windows considera que es la forma más robusta de hacerlo.

2

WMI es la forma correcta de buscar los programas instalados, ya que funcionará en diferentes versiones del sistema operativo y será compatible de ahora en adelante. Buscar regkeys específicos puede funcionar bien para versiones específicas de Windows pero no se garantiza que funcione en el futuro. Aquí hay un código python simple para comprobar Box Sync que acabo de probar en Windows 7. Tenga en cuenta que no todos los campos estarán disponibles para cada producto, así que tenga en cuenta que estos serán 'Ninguno'.

import wmi 
w = wmi.WMI() 
for p in w.Win32_Product(): 
    if 'Box, Inc.' == p.Vendor and p.Caption and 'Box Sync' in p.Caption: 
     print 'Installed {}'.format(p.Version) 

El inconveniente que he visto con WMI es que es muy lento para arrancar.

Cuestiones relacionadas