如何以编程方式获取已安装程序的列表

时间:2010-05-19 11:21:54

标签: visual-c++ registry

我正在创建一个程序,首先检查是否已经安装了某个特定程序,如果安装了它继续执行其他代码,如果没有安装,则安装该应用程序然后继续执行其他代码。 / p>

如何在VC ++中以编程方式检查应用程序是否已安装

1 个答案:

答案 0 :(得分:2)

我得到了一个类似的C#函数,它在注册表中的32位和64位条目上查找。我假设你得到了正在寻找的程序的正确名称,你需要的只是将它与键“DisplayName”匹配。我怀疑你在制作C ++时会遇到什么问题......它会像这样......

     string SoftwareKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
     bool found = false;
     RegistryKey rk = Registry.LocalMachine.OpenSubKey(SoftwareKey);

     foreach (string skName in rk.GetSubKeyNames())
     {
        RegistryKey sk = rk.OpenSubKey(skName);

        if (sk.GetValue("DisplayName") != null && 
        sk.GetValue("DisplayName").ToString().Equals("WhateverProgramYouAreLookingFor"))
       {
        //whatever you need to do with it
        found = true;
        break;
        }
     }
    if(!found)
    {
        SoftwareKey = @"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall";
        foreach (string skName in rk.GetSubKeyNames())
        {
            RegistryKey sk = rk.OpenSubKey(skName);
            if (sk.GetValue("DisplayName") != null && 
            sk.GetValue("DisplayName").ToString().Equals("WhateverProgramYouAreLookingFor"))
            {
                //whatever you need to do with it
                found = true;
                break;
            }
        }
    }