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

推荐答案

遍历注册表项"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"似乎可以给出已安装应用程序的完整列表.

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

这是一个粗略的例子,您可能想做一些事情来go 除空白行,如提供的第二个链接中所示.

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 SDK最新版本

等待时 Blazor 服务器按钮刷新

问:在 Blazor WASM 应用程序中存储 api 密钥的最佳方式是什么?

图像 UriSource 和数据绑定

如何解决请确保文件可访问并且它是有效的程序集或 COM 组件?

泛型方法是如何、何时、何地具体化的?

我什么时候应该在 C# 中使用使用块?

如何右对齐 DataGridView 列中的文本?

C# 中的 myCustomer.GetType() 和 typeof(Customer) 有什么区别?

Java 和 .NET 技术/框架的类似物

单元测试 C# 保护方法

Find() 和 First() 抛出异常,如何改为返回 null?

如何在 WPF 中的 Xaml 文件中添加注释?

让 String.Replace 只打整个单词的方法

String.Join 与 StringBuilder:哪个更快?

如何使用 DateTime 指定一天中的最晚时间

如何将 Excel 序列日期编号转换为 .NET DateTime?

表单不响应 KeyDown 事件

浮动与双重性能

我可以为 Dictionary 条目使用集合初始化程序吗?