2010-01-16 6 views
9

J'ai vu de nombreuses façons de récupérer des programmes installés sur WinXP + en python. Quel est le bon et le plus robuste façon de faire?'correct' et moyen fiable pour obtenir tous les programmes Windows installés en Python?

Actuellement j'accède HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall et en lisant chacune des clefs de là pour obtenir une liste. (On m'a dit que ce n'est pas la manière correcte de faire les choses) J'ai vu des exemples d'utilisation de WMI/Win32com pour faire cela, mais j'ai vu des commentaires avec ces implémentations que WMI pourrait être désactivé sur certains machines et que ce n'est pas une solution très fiable.

Existe-t-il une méthode à la fois correcte et fiable pour obtenir une liste des programmes installés? Aucun des exemples WMI que j'ai vus n'ont fonctionné sur cette machine (d'où ma réticence à l'utiliser, je ne fais que tourner WinFLP, qui est un vers dénudé de XP.)

Je semble avoir aussi trouvé le TechNet article que mes recherches ont montré qui est fourni à une réponse similaire sur ma question: http://gallery.technet.microsoft.com/ScriptCenter/en-us/154dcae0-57a1-4c6e-8f9f-b215904485b7 Notez que Vista/7 énumérés dans les plates-formes indique très clairement "Nope" ... ne fonctionnera pas. Donc, la transaction WMI semble être un non-go ...

Etre capable de récupérer le chemin installé serait également un avantage, car mon code actuel ne tient pas compte de l'installation sur un autre disque, ou dans un répertoire non-par défaut.

Répondre

8

Le script technet auquel vous faites référence fonctionne parfaitement sous Win 7 (avec Python 2.5 32bits), et je ne vois vraiment pas pourquoi il ne devrait pas.

En fait, la véritable faiblesse de l'approche WMI est qu'elle ne répertorie que les produits installés via Windows Installer. Donc, ça ne vous donnera pas la liste complète. De nombreux programmes utilisent des programmes d'installation différents. Comparez simplement les résultats entre (Select * from Win32_Product) et ce qui est affiché dans le Panneau de configuration. Donc, à moins que vous ne soyez sûr que le programme qui vous interpose dans votre liste est installé avec MSI, WMI n'est certainement pas une réponse.

Donc, ce n'est peut-être pas très pythonique, mais la meilleure façon, pour autant que je sache, est d'utiliser le registre comme vous l'avez fait. C'est en fait le fonctionnement du panneau de contrôle, donc au moins Windows le considère comme le moyen le plus robuste de le faire.

2

WMI est la manière correcte de rechercher les programmes installés car elle fonctionnera sur différentes versions du système d'exploitation et sera prise en charge à l'avenir. La recherche de regkeys spécifiques peut fonctionner correctement pour des versions spécifiques de Windows mais n'est pas garantie de fonctionner dans le futur. Voici un code python simple à vérifier pour Box Sync que je viens d'essayer sur Windows 7. Notez que tous les champs ne seront pas disponibles pour chaque produit, alors soyez conscient que ce sera «Aucun». L'inconvénient que j'ai vu avec WMI est qu'il est très lent à démarrer.

Questions connexes