Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

QSettings allow to access the 32-bit Registry from a 64-bit application.



  • I'm developing an application using the Qt framework. One of the features is to get all registry from HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall using QSettings.

    When I was testing, I found something curious: My code get the path "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", in other words, QSettings registry("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", QSettings::NativeForm), and print it to json file. Until then, it's ok. But when I open the regedit.exe and I go to the same path, the values are different. My application don't collect that informations.

    So I went researching and found something, windows do a redirection of this path to HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows, and that path (64bits path) apparently is inaccessible.

    I found "this commit":https://qt.gitorious.org/qt/sschuberths-clone/commit/d1b701bf69aa3ffd097442b4574a31520fc75567 where seems fix it, but it's not the same code of qt framework, and a "QTBUG":https://bugreports.qt-project.org/browse/QTBUG-3845?page=com.atlassian.jira.plugin.system.issuetabpanels:changehistory-tabpanel open since 2010, but still "Unresolved".

    Anyone knows how can I get around this problem still using QSettings? Some registry, like WinRAR, are not collected because it. I've tried use qsettings of this commit, but use QSettings::Registry64Format is the same of nothing. Don't get error, but do not collect.

    Thanks, sry about the bad english.


Log in to reply