2009-04-29 5 views

risposta

10

Se vuoi dire la lista delle applicazioni installate che viene mostrato in Add \ Installazione applicazioni nel Pannello di controllo, lo si può trovare nella chiave di registro:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall 

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

È necessario utilizzare winreg API in python per leggere i valori dal registro.

+0

Dang. Mi hai battuto sul tempo. –

+0

La chiave THAT è vuota sul mio sistema. Controlla il sistema operativo in fondo al tuo link e vedrai che non è per WinXP. – sharkin

+0

@ R.A, questa chiave del Registro di sistema contiene molte sottochiavi (sottocartelle). Ciascuno rappresenta un programma nell'elenco di disinstallazione. Si prega di leggere la struttura di quella chiave nel link indicato. – Aziz

10

Controllare la classe Win32_Product WMI (Strumentazione gestione Windows). Here's a tutorial sull'utilizzo di WMI in Python.

+0

Secondo questo. Abituarsi al WMI ti aiuterà con altri compiti relativi all'amministrazione di Windows. Recentemente ho scritto un esempio su come usare WMI da C++. http://blog.emptycrate.com/node/376 ​​ – lefticus

+4

Ci sono alcuni avvertimenti, però. WMI può essere disabilitato su alcuni PC. Inoltre, non elenca tutte le applicazioni visibili nell'applet del Pannello di controllo, solo quelle installate da un programma di installazione compatibile. – atzz

8

Pannello di controllo utilizza API COM Win32, che è il metodo ufficiale (vedere Google Gruppi, Win32)
Non fare mai affidamento sul registro.

+0

+1 per "non fare mai affidamento sul registro" – Rob

+2

Molti anni tardi, ma -1 per non dire * quale * COM API è stata utilizzata. Un gruppo usenet è grande; dire "google it" in una risposta non è abbastanza buono. – andlabs

6

Il Microsoft Script Repository ha 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

codice C# .NET per ottenere l'elenco dei software installati utilizzando WMI in xp e win7 (WMI è l'unico modo in 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 migliore implementazione del registro-based che ho visto è quello scritto da Chris Wright (chris128) pubblicato allo http://www.vbforums.com/showthread.php?t=598355. Utilizza più chiavi di registro ed è molto più complesso di tutte le risposte attualmente pubblicate qui. Sembra che produca risultati identici all'app Aggiungi/Rimuovi Programmi e, come l'app ARP, offre anche un'opzione per includere gli aggiornamenti.

Sebbene sia implementato in VB.NET, dovrebbe essere facile da convertire in altri linguaggi .NET come C# o IronPython. Immagino che convertire prima in IronPython dovrebbe rendere abbastanza facile il porting su Python regolare, se questo è quello che vuoi, ma l'ho solo convertito in C# e poi ripulito un po 'il codice.

Solo un piccolo bug da segnalare: GetUserInstallerKeyPrograms() non aggiunge la versione per i programmi utente all'elenco, anche se la estrae. Questo è facile da risolvere però.

+0

Grazie, questo è molto utile. –