2012-11-09 82 views
5

我有一個調用一個C#應用程序:爲什麼我的32位應用程序無法訪問32位註冊表配置單元?

Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Software\MyApp")     

它被設置爲目標的x86,當我運行它,我可以從任務管理器中看到,這是一個32位進程。然而,這行代碼奇怪地轉向HKCU \ Software \ MyApp的64位配置單元,而不是HKCU \ Software \ Wow6432Node \ MyApp的32位配置單元。有任何想法嗎?

我還啓動了Powershell的兩個實例,一個32位和一個64位,並運行下面的代碼,但都返回64位Hive的值。

get-itemproperty -Path Registry::HKEY_CURRENT_USER\Software\MyApp 

任何想法可能在這裏出了什麼問題?我已三重檢查了32位和64位配置單元的註冊表設置是否與註冊表不同。

+0

它可能是CRL檢測到你正在使用64位計算器並進入配置單元。只是猜測雖然! – FrostyFire

回答

4

因爲您正在訪問共享密鑰(HKCU \ Software),而不是重定向。見http://msdn.microsoft.com/en-us/library/windows/desktop/ms724072(v=vs.85).aspx和(更具體地說)http://msdn.microsoft.com/en-us/library/windows/desktop/aa384253(v=vs.85).aspx

從第一連桿(重點煤礦):

在64位的Windows,部分的註冊表項的被用於32位應用程序和單獨存儲 64位應用程序,並使用註冊表重定向器和 註冊表反射將 映射到單獨的邏輯註冊表視圖,因爲64位版本的應用程序可能使用與32位版本不同的註冊表項和值。 還有 也是沒有重定向或反映的共享註冊表項。

相關問題