64 votes

Détecter les programmes installés via le registre

J'ai besoin de développer un processus qui permet de détecter si l'utilisateur de l'ordinateur a certains programmes installés et si oui, quelle version. Je crois que j'ai besoin d'une liste avec l'emplacement de registre et les touches de chercher et de le nourrir pour le programme qui n'est pas un problème. Est-il un meilleur moyen pour y parvenir?

Ma première pensée a été de vérifier dans le registre de la désinstallation entrées, mais il semble que l'une des applications que je souhaite détecter n'en a pas. Qu'est-ce que l'emplacement standard pour tous de registre à l'aide d'applications pour faire une entrée dans?

45voto

Bernd Ott Points 2637

Sur les systèmes 64 bits, la clé x64 est la suivante: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall

La plupart des programmes sont répertoriés.

Regardez la clé: DisplayName DisplayVersion

le dernier n'est pas toujours réglé!

Sur les systèmes 64 bits, la clé x86 (généralement avec plus d'entrées) est la suivante: HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Windows \ CurrentVersion \ Uninstall

38voto

Piskvor Points 46986

Paramètres spécifiques à l'utilisateur doit être écrite à HKCU\Software paramètres spécifiques à la machine à HKLM\Software. En vertu de ces touches, la structure [software vendor name]\[application name] (par exemple, HKLM\Software\Microsoft\Internet Explorer) peut-être le plus commun, mais c'est juste une convention pas une loi de la nature.

Beaucoup (la plupart?) des applications aussi ajouter leurs désinstaller les entrées d' HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\[app name], mais là encore, pas toutes les applications de ce faire.

Ce sont des clefs les plus importantes; toutefois, le contenu de la base de registre n'ont pas à représenter le logiciel installé exactement - peut-être que l'application a été installée une fois, mais ensuite été supprimés manuellement, ou peut-être le programme de désinstallation ne supprime pas toutes les traces de. Si vous voulez vous en assurer, vérifiez le système de fichiers pour voir si l'application existe toujours où ses entrées de registre dire qu'il est.

Edit:

Si vous êtes un membre du groupe Administrateurs, vous pouvez vérifier l' HKEY_USERS ruche de chaque utilisateur HKCU réside effectivement il y a (vous aurez besoin de connaître le SID de l'utilisateur, ou de passer par tous les d'entre eux).

Remarque: Comme @Brian Ensink dit, "installé" est un peu vague concept - sommes-nous essayer de trouver ce que l'utilisateur peut exécuter? Certains logiciels n'a même pas écrire dans le Registre à tous: de la recherche pour "portable apps" pour voir les applications qui ont été spécialement modifié pour fonctionner directement à partir du support (CD/USB) et de ne pas laisser de traces sur l'ordinateur. Nous pouvons également analyser les disques et les disques réseau, et tout ce que l'utilisateur télécharge, et le monde accessible partages Windows dans l'Internet (oui, ces choses existent légitimement - \\live.sysinternals.com\tools vient à l'esprit). Dans ce sens, il n'y a pas vraiment de limite de ce que l'utilisateur peut exécuter, à moins d'en être empêché par des stratégies système.

9voto

Brian Ensink Points 7579

Vous pouvez utiliser l'API MSI pour énumérer tout ce qui est installé par Windows Installer, mais cela ne répertorie pas tous les logiciels disponibles sur une machine. Sans en savoir plus sur ce dont vous avez besoin, le concept d '"installé" est un peu vague. Il existe de nombreuses façons de déployer un logiciel sur un système, allant des gros installateurs compliqués aux fichiers ZIP, etc.

6voto

MSalters Points 74024

Une application n'a pas besoin d'avoir une entrée de registre. En fait, de nombreuses applications n'ont pas besoin d'être installé à tous. U3 USB sticks sont un bon exemple; les programmes sur eux, il suffit d'exécuter à partir du système de fichiers.

Comme l'a noté, la plupart des applications peuvent être trouvés par l'intermédiaire de leur désinstaller la clé de registre. C'est en fait une paire de clés, par utilisateur et par machine (HKCU/HKLM Piskvor mentionné seulement la HKLM un). Il n'est pas (toujours) de vous donner le répertoire d'installation.

Si c'est dans HKCU, alors vous devez comprendre que HKEY_CURRENT_USER signifie vraiment "Utilisateur Actuel". D'autres utilisateurs ont leurs propres HKCU entrées, et de leur propre logiciel installé. Vous ne trouvez pas que. La lecture de chaque HKEY_USERS de la ruche est une catastrophe sur les réseaux d'entreprise avec des profils itinérants. Vous ne voulez vraiment pas à chercher de 1000 comptes à partir de votre télécommande [etats-unis|Chine|Europe] office.

Même si une application est installée, et vous savez d'où, il ne peut pas avoir la même "version" notion que vous avez. La meilleure source est la "version" de la ressource dans les exécutables. C'est en effet un pluriel, donc vous devez trouver tous les d'entre eux, d'extraire des ressources de la version de tous, et en cas de conflit decid sur quelque chose de raisonnable.

Donc bonne chance. Il y a dozes de moyens à l'échec.

1voto

Nick Points 7173

On dirait que chercher quelque chose de spécifique au programme installé fonctionnerait mieux, mais HKCU \ Software et HKLM \ Software sont les endroits à regarder.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X