2016-03-14 102 views
0

我想訪問存儲在Windows註冊表中的Windows操作系統的機器guid。我在Windows 8操作系統上使用Qt 4.8。我只收到一個空字符串。我下面Qt的QSettings official docQt4 - 從註冊表中訪問Windows機器Guid

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: 

我可以在HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography在Windows註冊表編輯種子MachineGuid。如何閱讀Windows註冊表的GUID?

+0

你的應用程序是32位的嗎? –

+0

@CollinDauphinee處理器和操作系統都是64位;不知道應用程序是否是64位。如何知道我的應用程序是32位還是64位? – stackOverflow

+0

@CollinDauphinee我的應用程序是32位;在Windows任務管理器中檢查它顯示括號中的32位(32位)。 – stackOverflow

回答

2

您的問題是Windows有一個單獨的64位和32位註冊表視圖。

默認情況下,您將獲得與您的應用程序的目標體系結構相匹配的註冊表視圖。在這種情況下,你實際上被重定向到32位的觀點,所以你的代碼正在檢查位於HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Cryptography

MachineGuid密鑰的密鑰,與許多其他Windows創建的鑰匙一起,只存在於64 bit註冊表在64位系統上。您可以指定從本地API訪問哪個註冊表視圖,但我不知道通過Qt執行任何操作。

+1

有沒有解決方案? – stackOverflow

1

正如@Collin Dauphinee指出的那樣,您可能正在訪問64位窗口上的32位註冊表。

如果是這樣的話,你有,而不是寫作

QSettings setting("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography",QSettings::NativeFormat); 
QString mGuid=setting.value("MachineGuid").toString(); 

訪問的Qt 5.7,你可以寫

QSettings setting("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography",QSettings::Registry64Format); 
QString mGuid=setting.value("MachineGuid").toString(); 

這完全適用於自己。