我想访问存储在Windows注册表中的Windows操作系统的机器guid。我在Windows 8操作系统上使用Qt 4.8。我只得到一个空字符串。我正在关注Qt' QSettings official doc
QSettings setting("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography",QSettings::NativeFormat);
QString mGuid=setting.value("MachineGuid").toString();
qDebug()<<"Machine Guid is: " <<mGuid;
qDebug()<<setting.status(); // returns zero means 'no access error'
输出:
Machine Guid is:
我可以在Windows注册表编辑器的MachineGuid
中播种HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography
。如何从Windows注册表中读取guid?
答案 0 :(得分:2)
您的问题是Windows有一个单独的64位和32位注册表视图。
默认情况下,您将获得与您的应用程序的目标体系结构相匹配的注册表视图。在这种情况下,您实际上被重定向到32位视图,因此您的代码正在检查HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Cryptography
处的密钥
MachineGuid
密钥以及许多其他Windows创建的密钥仅存在于64位系统上的64位注册表中。您可以指定从本机API访问哪个注册表视图,但我不知道如何通过Qt进行访问。
答案 1 :(得分:1)
正如@Collin Dauphinee指出的那样,你可能正在访问64位Windows上的32位注册表。
如果是这种情况,您可以访问Qt 5.7,而不是写
QSettings setting("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography",QSettings::NativeFormat);
QString mGuid=setting.value("MachineGuid").toString();
你可以写
QSettings setting("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography",QSettings::Registry64Format);
QString mGuid=setting.value("MachineGuid").toString();
这对我自己很有效。