Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用c获取所有已安装的windows应用程序#_C#_Windows_Registry - Fatal编程技术网

C# 如何使用c获取所有已安装的windows应用程序#

C# 如何使用c获取所有已安装的windows应用程序#,c#,windows,registry,C#,Windows,Registry,我已尝试HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall在我的计算机中安装所有应用程序并获取应用程序列表,但我需要获取Windows的“添加或删除程序”功能中列出的所有应用程序 请帮助我获取此解决方案。我认为您可以使用WMI,如下所示: ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM W

我已尝试
HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
在我的计算机中安装所有应用程序并获取应用程序列表,但我需要获取Windows的“添加或删除程序”功能中列出的所有应用程序


请帮助我获取此解决方案。

我认为您可以使用WMI,如下所示:

ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Product");
foreach(ManagementObject mgmtObjectin searcher .Get())
{
    Console.WriteLine(mgmtObjectin ["Name"]);
}
另一种可能性是对32位应用程序使用SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall,对64位应用程序使用HKEY_LOCAL\u MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall,并合并列表,我认为您的代码应该如下所示:

string registry_key_32 = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
string registry_key_64 = @"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall";

using(Microsoft.Win32.RegistryKey key = Registry.LocalMachine.OpenSubKey(registry_key_32))
{
    foreach(string name in key.GetSubKeyNames())
    {
        using(RegistryKey subkey = key.OpenSubKey(name))
        {
            Console.WriteLine(subkey.GetValue("DisplayName"));
        }
    }
}
// And...
using(Microsoft.Win32.RegistryKey key = Registry.LocalMachine.OpenSubKey(registry_key_64))
{
    foreach(string name in key.GetSubKeyNames())
    {
        using(RegistryKey subkey = key.OpenSubKey(name))
        {
            Console.WriteLine(subkey.GetValue("DisplayName"));
        }
    }
}

希望有帮助。

我认为您可以使用WMI,如下所示:

ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Product");
foreach(ManagementObject mgmtObjectin searcher .Get())
{
    Console.WriteLine(mgmtObjectin ["Name"]);
}
另一种可能性是对32位应用程序使用SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall,对64位应用程序使用HKEY_LOCAL\u MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall,并合并列表,我认为您的代码应该如下所示:

string registry_key_32 = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
string registry_key_64 = @"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall";

using(Microsoft.Win32.RegistryKey key = Registry.LocalMachine.OpenSubKey(registry_key_32))
{
    foreach(string name in key.GetSubKeyNames())
    {
        using(RegistryKey subkey = key.OpenSubKey(name))
        {
            Console.WriteLine(subkey.GetValue("DisplayName"));
        }
    }
}
// And...
using(Microsoft.Win32.RegistryKey key = Registry.LocalMachine.OpenSubKey(registry_key_64))
{
    foreach(string name in key.GetSubKeyNames())
    {
        using(RegistryKey subkey = key.OpenSubKey(name))
        {
            Console.WriteLine(subkey.GetValue("DisplayName"));
        }
    }
}

希望有帮助。

请格式化您的问题。我认为注册表不会遗漏您在“添加或删除程序”中看到的任何内容。还有什么评论吗?是的,我同意@Simonzhao。该注册表位置是“添加或删除程序”检查已安装软件的唯一位置。@ThePludite不正确。“添加或删除程序”也会咨询其他位置。如果您想显示与“添加或删除程序”相同的内容,@RaymondChen它还使用哪些其他位置?这篇链接文章只谈到从控制面板小程序本身获取列表。请格式化您的问题。我认为注册表不会遗漏您在“添加或删除程序”中看到的任何内容。还有什么评论吗?是的,我同意@Simonzhao。该注册表位置是“添加或删除程序”检查已安装软件的唯一位置。@ThePludite不正确。“添加或删除程序”也会咨询其他位置。如果您想显示与“添加或删除程序”相同的内容,@RaymondChen它还使用哪些其他位置?链接的文章只是讨论如何从控制面板小程序本身获取列表。
HKLM\SOFTWARE\Wow6432Node
实际上用于64位机器上的32位应用程序。64位应用程序直接放入it
HKLM\SOFTWARE
HKLM\SOFTWARE\Wow6432Node
实际上用于64位机器上的32位应用程序。64位应用程序直接放入it
HKLM\SOFTWARE