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ò.
Come si definisce "applicazione installata"? –
Chiarimento aggiunto – sharkin