按名称问题获取卸载应用程序路径

Posted

技术标签:

【中文标题】按名称问题获取卸载应用程序路径【英文标题】:Get uninstall application path by name issue 【发布时间】:2017-07-23 21:16:50 【问题描述】:

我想通过应用程序名称从注册表中获取应用程序卸载路径。

代码:

QString Test::getAppUninstallPath(QString name)

    QString uninstallLocation;
    QStringList allCurrentUserKeys;
    QSettings registryKeyCurrentUser("HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall", QSettings::NativeFormat);
    allCurrentUserKeys = registryKeyCurrentUser.allKeys();

    for (QString key : allCurrentUserKeys) 
        if (key.contains("DisplayName")) 
            if (registryKeyCurrentUser.value(key).toString() == name) 
                uninstallLocation = registryKeyCurrentUser.value("UninstallString").toString();
            
        
    

    return uninstallLocation;

它什么也不返回。如何获取应用的卸载路径?谢谢。

【问题讨论】:

【参考方案1】:

感谢 hskoglund。因为我正在处理层次结构/嵌套键,所以我应该使用beginGroup()/endGroup()

代码:

    QString uninstallLocation;
    QSettings registryKeyLM("HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall", QSettings::NativeFormat);

    auto allGroups = registryKeyLM.childGroups();
    for (auto group : allGroups)
    
        registryKeyLM.beginGroup(group);

        for (auto key : registryKeyLM.childKeys())
            if ("DisplayName" == key)
                if (registryKeyLM.value(key) == name)
                    uninstallLocation = registryKeyLM.value("UninstallString").toString();

        registryKeyLM.endGroup();
    

    return uninstallLocation;

【讨论】:

以上是关于按名称问题获取卸载应用程序路径的主要内容,如果未能解决你的问题,请参考以下文章

如何从注册表中获取ArcGIS的安装路径

如何从注册表中获取ArcGIS的安装路径

按名称和参数获取 vue-router 的路由

使用 PackageManager 获取包名称 [重复]

Inno Setup5 如何更改卸载图标(我做出来的安装程序和卸载的一样)我想把卸载图标换成别的。

adb命令安装、卸载、 获取包名