代码
/// <summary>/// Windows信息/// </summary>public partial class WindowsInfo{private static List<AppInfo> GetInstalledAppInfos(){List<AppInfo> appInfos = new List<AppInfo>();string SameApp = "";void AddApp(RegistryKey subkey, string keyName){string displayIcon = subkey.GetValue("DisplayIcon") as string;if (string.IsNullOrWhiteSpace(displayIcon)) displayIcon = string.Empty;string installLocation = subkey.GetValue("InstallLocation") as string;if (string.IsNullOrWhiteSpace(installLocation)) installLocation = string.Empty;string displayName = subkey.GetValue("DisplayName") as string;if (string.IsNullOrWhiteSpace(displayName)) displayName = string.Empty;string uninstallString = subkey.GetValue("UninstallString") as string;if (string.IsNullOrWhiteSpace(uninstallString)) uninstallString = string.Empty;var app = new AppInfo(displayName, displayIcon, installLocation, keyName, uninstallString);if (appInfos.Exists(a => a.ToString() == app.ToString())){SameApp += app.ToString() + "\r\n";}else{appInfos.Add(app);}}using (RegistryKey key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", false)){foreach (String keyName in key.GetSubKeyNames()){RegistryKey subkey = key.OpenSubKey(keyName);AddApp(subkey, keyName);}}using (var key = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", false)){foreach (String keyName in key.GetSubKeyNames()){RegistryKey subkey = key.OpenSubKey(keyName);AddApp(subkey, keyName);}}using (RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall", false)){foreach (String keyName in key.GetSubKeyNames()){RegistryKey subkey = key.OpenSubKey(keyName);AddApp(subkey, keyName);}}return appInfos;}}/// <summary>/// APP信息/// </summary>public class AppInfo{public AppInfo(string name, string displayIcon, string installLocation, string productCode, string uninstallString){DisplayName = name;DisplayIcon = displayIcon;InstallLocation = installLocation;ProductCode = productCode;UninstallString = uninstallString;}/// <summary>/// 显示名称/// </summary>public string DisplayName { get; set; }/// <summary>/// 启动路径/// </summary>public string DisplayIcon { get; set; }/// <summary>/// 安装位置/// </summary>public string InstallLocation { get; set; }/// <summary>/// 产品代码或名称/// </summary>public string ProductCode { get; set; }/// <summary>/// 卸载字符串/// </summary>public string UninstallString { get; set; }public override string ToString(){return $"Name:{DisplayName}---Icon:{DisplayIcon}---Loc:{InstallLocation}---Code:{ProductCode}---UnStr:{UninstallString}";}}
例子
var installedAppInfos = WindowsInfo.GetInstalledAppInfos();
参考
c#获取系统已安装软件列表(32,64位均可使用)_zhoyuwo的博客-CSDN博客