测试篇 c#获取所有已经安装的程序

public class ProgramHelper {
    const string reg32 = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
    const string reg64 = @"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall";

    /// <summary>
    /// 获取所有已经安装的程序
    /// </summary>
    /// <returns>字典:程序名称,安装路径</returns> 
    public Dictionary<string, string> GetProgramInfo(){
        var map32 = GetMap(reg32);
        var map64 = GetMap(reg64);
        foreach(var item in map64){
            map32.TryAdd(item.Key,item.Value);
        }
        return map32;
    }

    Dictionary<string, string> GetMap(string reg) {
        using RegistryKey pregkey = Registry.LocalMachine.OpenSubKey(reg);
        var names = pregkey.GetSubKeyNames();
        return names.Select(name => GetNode(pregkey, name))
            .Where(node => node != null)
            .ToDictionary(node => node.Item1, node => node.Item2);
    }

    (string,string)? GetNode(RegistryKey pregkey, string name){
        using var currentKey = pregkey.OpenSubKey(name);
        if(currentKey is null) return null;
        var displayName = currentKey.GetValue("DisplayName")?.ToString(); // 显示名称
        if(displayName is null) return;
        var uninstallString = currentKey.GetValue("UninstallString")?.ToString(); // 卸载字符串路径
        if(uninstallString is null) return;

        // 发行类型,值是Security Update为安全更新,Update为更新.
        var t = currentKey.GetValue("ReleaseType")?.ToString();
        if (t is null || t == "Security Update" || t == "Update") return;

        string path = "";
        var installLocation = currentKey.GetValue("InstallLocation")?.ToString(); // 安装路径
        if(installLocation is not null)
            path = installLocation;

        return (displayName, path);
    }
}
       
posted @   惊惊  阅读(2459)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示