在QT中读取Windows注册表

10

我想通过读取HKEY_CURRENT_USER的卸载注册表文件来列出所有已安装的应用程序。但看起来不能使用QSettings来完成,由于某些安全原因(我猜测)。

QSettings maya("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall

人们建议在Windows平台上使用WinAPI来实现这一点。

请问有人可以指导我如何添加和使用这个库吗?谢谢


1
Win32 API已经被Qt链接,所以你只需要#include <windows.h>就可以使用它了。 - MrEricSir
你好,MrEricSir 您有使用win32_product查询应用程序的示例吗? - illunara
如果你指的是win32,我相信在SO上你可以找到很多例子。 - MrEricSir
1个回答

16

为了获取Windows注册表中“卸载”下所有子项目的列表,您需要使用QSettings :: childGroups()函数,即:

为了获得Windows注册表中“卸载”下所有子项的列表,您需要使用QSettings::childGroups()函数,例如:

QSettings m("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall",
            QSettings::NativeFormat);
QStringList ak = m.childGroups();

这将返回所有已安装应用程序的列表。

更新:

获取已安装应用程序的列表后,可以阅读安装详细信息。有两种方法可以做到这一点。例如,要读取“Autodesk Maya 2014”应用程序的“UinstallPath”键:

m.beginGroup("Autodesk Maya 2014");
QString path = m.value("UninstallPath").toString();
m.endGroup();

或者简单地说:

QString path = m.value("Autodesk Maya 2014/UninstallPath").toString();

我能从中获取键和值吗? - illunara
@illunara,是键还是值还是两者都有?从哪里获取?请澄清你的问题。 - vahancho
抱歉问题不够清晰,假设我想获取应用程序的路径。通常,我可以使用QSettings().value("key"),但对于win7 x64它总是返回空字符串""。 - illunara
@illunara,应用程序的路径存储在哪里?你是指“UninstallString”值吗?你能举个例子吗? - vahancho
我在这里附上了注册表导出数据的一部分 https://gist.github.com/illunara/6c16ec23b726d54e6e82 例如Autodesk Maya 2014,我想从“UninstallPath”中获取值, 即“C:\ Program Files \ Autodesk \ Maya2014 \ Setup \ Setup.exe”。顺便说一下,我按照您之前告诉我的方法进行操作,但并非所有卸载程序都列出来了 O_O - illunara
抱歉,vahancho。没有运气,我在这里附上了一个缩略图,这样你就可以看到输出结果了。 http://postimg.org/image/ystv96cj3/它在[HKEY_CURRENT_USER]下工作得很好。顺便说一下,我使用的是Win 7 x64操作系统。 - illunara

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接