84 votes

Obtenir les applications installées dans un système

Comment obtenir les applications installées dans le système en utilisant le code c #?

120voto

Xiaofu Points 6163

Une itération dans la clé de registre "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" semble donner une liste exhaustive des applications installées.

Hormis l'exemple ci-dessous, vous pouvez trouver une version à l'aide de Linq ici et une version similaire à ce que j'ai fait ici.

C'est un exemple grossier, vous aurez probaby voulez faire quelque chose de supprimer les lignes vides comme dans le 2ème lien fourni.

string registry_key = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
using(Microsoft.Win32.RegistryKey key = Registry.LocalMachine.OpenSubKey(registry_key))
{
    foreach(string subkey_name in key.GetSubKeyNames())
    {
        using(RegistryKey subkey = key.OpenSubKey(subkey_name))
        {
            Console.WriteLine(subkey.GetValue("DisplayName"));
        }
    }
}

Alternativement, vous pouvez utiliser WMI comme il a été mentionné:

ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_Product");
foreach(ManagementObject mo in mos.Get())
{
    Console.WriteLine(mo["Name"]);
}

Mais c'est plutôt plus lent à s'exécuter, et j'ai entendu dire qu'il ne peut la liste des programmes installés sous "ALLUSERS", bien que peut-être incorrect. Il ignore également les composants de Windows et de mises à jour, ce qui peut être pratique pour vous.

9voto

Kirtan Points 11022

Vous pouvez jeter un oeil à cet article . Il utilise le registre pour lire la liste des applications installées.

 public void GetInstalledApps()
{
    string uninstallKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
    using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(uninstallKey))
    {
        foreach (string skName in rk.GetSubKeyNames())
        {
            using (RegistryKey sk = rk.OpenSubKey(skName))
            {
                try
                {
                    lstInstalled.Items.Add(sk.GetValue("DisplayName"));
                }
                catch (Exception ex)
                { }
            }
        }
    }
}
 

6voto

cf Blogpost Points 61

Voici un code complet pour rechercher une application installée ou un programme. 100% fonctionnent sur les systèmes 32 et 64 bits !!!

http://mdb-blog.blogspot.com/2010/12/c-check-if-programapplication-is.html

1voto

avesus Points 85

Utilisez l'API Windows Installer!

Cela permet de faire une énumération fiable de tous les programmes. Le registre n'est pas fiable, mais WMI est un poids lourd.

0voto

Nick Points 1082

Pourrais-je vous suggérer de prendre un coup d'oeil à WMI (Windows Management Instrumentation). Si vous ajoutez le Système.De référence de la gestion de votre projet C#, vous bénéficiez de l'accès à la classe `ManagementObjectSearcher", qui vous aurez probablement trouver utile.

Il existe différentes Classes WMI pour les Applications Installées, mais si il a été installé avec Windows Installer, puis le Win32_Product classe est probablement le mieux adapté pour vous.

ManagementObjectSearcher s = new ManagementObjectSearcher("SELECT * FROM Win32_Product");

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