侧边栏壁纸
  • 累计撰写 185 篇文章
  • 累计创建 77 个标签
  • 累计收到 17 条评论

目 录CONTENT

文章目录

C#获取Windows系统中所有已安装软件的名称和版本号

码峰
2022-08-31 / 0 评论 / 0 点赞 / 1,268 阅读 / 339 字 / 正在检测是否收录...
广告 广告

需求

在Windows中使用C#做软件开发,有时候需要获取当前系统中已安装的软件及其版本号,接下来就简单介绍一下,如何通过C#获取来实现。

示例代码

已安装的软件,在注册表中都会有软件信息和卸载信息,我们只需要扫描注册表即可获取到需要的信息了,代码如下:

        public static Dictionary<string, string> GetAllInstalledSoftware(string name)
        {
            var keys = new RegistryKey[]
            {
                Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"),
                Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"),
                Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall"),
                Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall")
            };
            var softs = new Dictionary<string, string>();
            foreach (var k in keys)
            {
                if (k == null) continue;
                foreach (var keyName in k.GetSubKeyNames())
                {
                    RegistryKey subkey = k.OpenSubKey(keyName);
                    var displayName = subkey.GetValue("DisplayName") as string;
                    if (!string.IsNullOrEmpty(displayName) && displayName == name)
                    {
                        var displayVersion = subkey.GetValue("DisplayVersion") as string;
                        if (!string.IsNullOrEmpty(displayVersion))
                        {
                            softs.Add(displayName, displayVersion);
                        }
                    }
                }
            }

            return softs;
        }

以上代码,主要针对64位的Windows,获取系统已安装的32位或64位的应用程序和版本,对于32位Windows,不需要扫描如下注册表路径:

Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall"),
Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall")

执行完成后,返回的是<软件名称, 版本号>这样的配对值。

0
广告 广告

评论区