在Windows中使用C#做软件开发,有时候需要获取当前系统中已安装的软件及其版本号,接下来就简单介绍一下,如何通过C#获取来实现。
1、通过注册表
csharp
public List<PcSoftinfo> GetAllInstalledSoftware(string name)
{
var keys = new RegistryKey[]
{
Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Installer\Products"),
Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Installer\Products"),
Registry.ClassesRoot.OpenSubKey(@"Installer\Products"),
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 List<PcSoftinfo>();
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;
//var productName = subkey.GetValue("ProductName") as string;不同注册表名称不一样。
if (!string.IsNullOrEmpty(displayName))
{
int systemComponent = (int)subkey.GetValue("SystemComponent", 0);
if (systemComponent == 1)
{
//系统应用排除
//continue;
}
var displayVersion = subkey.GetValue("DisplayVersion") as string;
if (!string.IsNullOrEmpty(displayVersion))
{
softs.Add(new PcSoftinfo() { Name = displayName, Ver = displayVersion });
}
}
}
}
return softs;
}
优点快,缺点不完全,有些软件读不到。
2、通过Win32_Product
csharp
public List<PcSoftinfo> IsSoftwareInstalled(string softwareName)
{
// 创建WMI查询,检查Win32_Product类中的安装信息
//string query = "SELECT Name, Version FROM Win32_Product WHERE Vendor ='厂家名称'";
string query = "SELECT Name, Version FROM Win32_Product";
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
var softs = new List<PcSoftinfo>();
foreach (ManagementObject obj in searcher.Get())
{
// 如果找到匹配的软件
string NAME = obj["Name"].ToString();
string version = obj["Version"]?.ToString();
softs.Add(new PcSoftinfo() { Name = NAME, Ver = version });
}
return softs; // 没找到软件
}
优点全,缺点慢。