2009-04-29 27 views

Respuesta

10

Si se refiere a la lista de aplicaciones instaladas que se muestra en Agregar \ quitar programas en el panel de control, se puede encontrar en la clave de registro:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall 

more info about how the registry tree is structured can be found here.

Debe usar el winreg API en python para leer los valores del registro.

+0

Dang. me pegaste a eso –

+0

La llave de THat está vacía en mi sistema. Verifique la ubicación del sistema operativo en la parte inferior de su enlace y verá que no es para WinXP. – sharkin

+0

@ R.A, esta clave de registro contiene muchas subclases (subcarpetas). Cada uno representa un programa en la lista de desinstalación. Por favor, lea sobre la estructura de esa clave en el enlace mencionado. – Aziz

10

Consulte la clase Win32_Product WMI (Windows Management Instrumentation). Here's a tutorial sobre el uso de WMI en Python.

+0

En segundo lugar. Acostumbrarse a WMI lo ayudará con otras tareas relacionadas con el administrador de Windows. Recientemente escribí una muestra de cómo usar el WMI de C++. http://blog.emptycrate.com/node/376 ​​ – lefticus

+4

Sin embargo, hay algunas advertencias. WMI se puede desactivar en algunas PC. Además, no enumera todas las aplicaciones visibles en el applet del Panel de control, solo aquellas instaladas por un instalador compatible. – atzz

8

El panel de control usa Win32 COM api, que es el método oficial (ver Grupos de Google, Win32)
Nunca confíe en el registro.

+0

+1 para "nunca confiar en el registro" – Rob

+2

Muchos años tarde, pero -1 por no decir * qué * COM API se utilizó. Un grupo usenet es grande; decir "ir a Google it" en una respuesta no es lo suficientemente bueno. – andlabs

6

El Microsoft Script Repository tiene un script for listing all installed software.

import win32com.client 
strComputer = "." 
objWMIService = win32com.client.Dispatch("WbemScripting.SWbemLocator") 
objSWbemServices = objWMIService.ConnectServer(strComputer,"root\cimv2") 
colItems = objSWbemServices.ExecQuery("Select * from Win32_Product") 
for objItem in colItems: 
    print "Caption: ", objItem.Caption 
    print "Description: ", objItem.Description 
    print "Identifying Number: ", objItem.IdentifyingNumber 
    print "Install Date: ", objItem.InstallDate 
    print "Install Date 2: ", objItem.InstallDate2 
    print "Install Location: ", objItem.InstallLocation 
    print "Install State: ", objItem.InstallState 
    print "Name: ", objItem.Name 
    print "Package Cache: ", objItem.PackageCache 
    print "SKU Number: ", objItem.SKUNumber 
    print "Vendor: ", objItem.Vendor 
    print "Version: ", objItem.Version 
3

código C# .NET Para obtener la lista de software instalado mediante WMI en Windows XP y Win7 (WMI es la única manera en win7)

WqlObjectQuery wqlQuery = 
     new WqlObjectQuery("SELECT * FROM Win32_Product"); 
     ManagementObjectSearcher searcher = 
      new ManagementObjectSearcher(wqlQuery); 

     foreach (ManagementObject software in searcher.Get()) { 
      Console.WriteLine(software["Caption"]); 
     } 
4

La mejor aplicación basada en el Registro que he visto es el escrito por Chris Wright (chris128) publicado en http://www.vbforums.com/showthread.php?t=598355. Utiliza varias claves de registro y es mucho más complejo que cualquiera de las respuestas publicadas actualmente aquí. Parece producir resultados idénticos a la aplicación Agregar o quitar programas, y al igual que la aplicación ARP, también proporciona una opción para incluir actualizaciones.

Aunque está implementado en VB.NET, debería ser fácil convertirlo a otros lenguajes .NET como C# o IronPython. Imagino que la conversión a IronPython primero debería facilitar bastante el acceso a Python regular si eso es lo que desea, pero solo lo convertí a C# y luego lo limpié un poco.

Solo un pequeño error que señalar: GetUserInstallerKeyPrograms() no agrega la versión para programas de usuario a la lista, aunque la extraiga. Esto es fácil de arreglar sin embargo.

+0

Gracias, este es el más útil. –

Cuestiones relacionadas