雷达智富

首页 > 内容 > 程序笔记 > 正文

程序笔记

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

2024-08-22 176

需求

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

示例代码

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

        public static Dictionarystring, 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 Dictionarystring, 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)

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

更新于:3个月前
赞一波!2

文章评论

评论问答