如何使用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组件&;更新,这可能对你很方便.

.net相关问答推荐

dotnet ef dbcontext scaffold command --data-annotations 或 -d 命令行参数似乎不起作用

CustomControl 计算自己的宽度和高度 - 使用 bounds.Height=0 调用 ArrangeOverride

为什么 C# 不推断我的泛型类型?

无法从 Microsoft.Extensions.Logging 解析 ILogger

System.ServiceModel 在 .NET Core 项目中找不到

检测到包降级警告(dotnet core,vs 2017)

无法加载文件或程序集“System.ValueTuple”

如何卸载“Microsoft .NET Core 1.0.0 RC2 - VS 2015 Tooling Preview 1”?

Double 的“==”运算符的定义

如何使我的托管 NuGet 包支持 C++/CLI 项目?

如何在插值字符串中使用三元运算符?

AsyncLocal 的语义与逻辑调用上下文有何不同?

EnsureSuccessStatusCode 的使用和它抛出的 HttpRequestException 的处理

使用给定的 DateTime 对象获取一个月的第一天和最后一天

3 个长整数的平均值

将 SignalR 2.0 .NET 客户端重新连接到服务器集线器的最佳实践

为什么 HttpClient BaseAddress 不起作用?

如何防止任务的同步延续?

找不到 Microsoft.Office.Interop Visual Studio

在 WPF 中的文本框上设置焦点