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