需求
在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")
执行完成后,返回的是<软件名称, 版本号>这样的配对值。
评论区