我的舊應用程序寫入註冊表(最終被虛擬化),現在我希望安裝程序實際讀取這些數據,當我直接從LOCAL_MACHINE嘗試時(我不知道密鑰是虛擬化)我得到了錯誤,然後當我決定嘗試直接從虛擬化密鑰中讀取時,我也遇到了錯誤。從虛擬化Windows註冊表中讀取密鑰
Windows 2008服務器64位,我的應用程序是32位,啓用UAC。
那麼它實際上是否可以直接從虛擬化Windows註冊表讀取?
現在我需要讀取這些數據,但是。
這不起作用。
if regkeyexists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Wow6432Node\Company\App') then
begin
msgBox('Exists', mbinformation, mb_ok);
end else begin
msgBox('Doesnt exists', mbinformation, mb_ok);
end;
而且這不起作用。
if regkeyexists(HKEY_CURRENT_USER, 'Software\Classes\VirtualStore\MACHINE\SOFTWARE\Wow6432Node\Company\App') then
begin
msgBox('Exists', mbinformation, mb_ok);
end else begin
msgBox('Doesnt exists', mbinformation, mb_ok);
end;
它說,關鍵不存在
所以現在我不能真正讀取數據? 我查過了,路徑還行。
使用RegKeyExists(HKEY_LOCAL_MACHINE_32 ...'或RegKeyExists(HKLM32 ...)並從您的關鍵路徑中移除該'Wow6432Node'。在64位系統上使用來自'Wow6432Node'節點的根密鑰讀取。 – TLama
我試過了,似乎還沒有工作仍然.. HKLM_32和HKLM有什麼區別?它直接指向Wow6432Node嗎? 由於我的應用程序是32位,當它寫入註冊表時,它實際上寫入這個節點(當我運行在一個64位系統,這是我現在正在做的),這就是爲什麼我試圖從那裏讀取。 –
這個問題實際上是因爲Inno安裝程序以管理員權限運行,即使我的Windows用戶是管理員,如果使用「以管理員身份運行」執行我的應用程序,它就會被執行es正確地LOCAL_MACHINE ...並且如果我不,它不能讀取虛擬化的密鑰.. –