c# - 获取系统中已安装的应用程序

标签 c# .net installation

如何使用c#代码获取系统中安装的应用程序?

最佳答案

遍历注册表项“SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall”似乎给出了已安装应用程序的完整列表。

除了下面的示例,您还可以找到与我所做的类似的版本 here .

这是一个粗略的示例,您可能想要像提供的第二个链接中那样删除空白行。

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"));
        }
    }
}

或者,您可以使用前面提到的 WMI:

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

但这执行起来相当慢,而且我听说它可能只列出安装在“ALLUSERS”下的程序,尽管这可能是不正确的。它还会忽略 Windows 组件和更新,这对您来说可能很方便。

关于c# - 获取系统中已安装的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/908850/

相关文章:

c# - foreach 的新手性能问题......需要建议

c# - 如何在不使用乘法(*)符号的情况下将十进制数相乘

.net - 告诉 mono/.NET 只使用 X 内存量?

perl - 如何在没有安装权限的情况下使用新的 Perl 模块?

windows - NSIS 安装程序 - 定义安装程序和系统 x32/x64

c# - 为什么多次调用 GC.Collect() 会释放一些通常不会清理的内存?

c# - 无法将对象加载到 Asp.net 上的 Redis session 状态提供程序

c# - 如何强制我的 .NET 应用程序以管理员身份运行?

c# - 函数参数 : IEnumerable, ICollection 还是数组?

node.js npm 安装 fs 错误