2014-03-13 48 views
0

我正在運行爲AnyCPU編譯的C#應用​​程序。它訪問註冊表鍵並獲得它們的價值。如果密鑰不存在,它將使用默認值創建它。我正在使用函數Registry.LocalMachine.CreateSubKey(strRegistryPath)來執行此操作,其中strRegistryPath是\ SOFTWARE \ MyAppln。密鑰在32位機器上的HKLM \ SOFTWARE \ MyAppln中創建並正常工作。但是,當我嘗試在64位機器上使用相同的程序時,這些鍵將在HKLM \ SOFTWARE \ Wow6432Node \ MyAppln中創建。由於這個原因,我無法正確讀取這個值。如何讓我的應用程序訪問註冊表項,而不管它的3​​2位或64位?

如何使我的程序在32位和64位機器上都能工作?

+0

你*不*實際編譯您的程序爲AnyCPU。平臺的名稱與抖動是否強制以32位模式運行沒有任何關係。重要的*真實*設置是項目+屬性,生成選項卡,平臺目標設置。如果您看到「首選32位」選項,請將其關閉。重複發佈配置。 –

+0

我使平臺目標爲AnyCPU。我看不到任何首選的32位選項。發佈配置我沒有得到你。仍然沒有工作。 @HansPassant –

+0

什麼是「仍然無法使用?」請定義「不工作」。我敢肯定,我給你的答案允許你從32位進程寫入64位視圖,如果這是你想要的。然而,人們不禁要問,爲什麼你非常關心從32位進程寫入32位視圖。如果你的進程是32位,那麼32位視圖可能是寫作的地方? –

回答

1

如果您想在HKLM\Software下創建密鑰,那麼您將受制於registry redirector。如果要編寫相同的位置,而不考慮代碼是32位還是64位,則必須選擇一個註冊表視圖,並始終在該位置寫入。選擇32位視圖或64位視圖,這並不重要。

一旦您開始思考,請使用RegistryView枚舉來強制使用您選擇的註冊表視圖。請注意,在32位系統上,只有一個註冊表視圖,因此您使用的值RegistryView將被忽略。

例如,如果您使用RegistryView.Registry64打開密鑰,那麼您的密鑰將永遠不會出現在Wow6432Node(WOW64重定向下的32位視圖)下。你可以在32位系統上很好地使用RegistryView.Registry64,它只是被忽略。

你也應該知道你的程序需要升級,因爲它寫入HKLM。這可能會對用戶產生不利影響。

+0

我正在使用** Createsubkey()**函數和_Registryview_ enum用於** openremotebasekey()**函數。那我該怎麼做呢?你能告訴如何修改或使用它嗎? @David –

+0

請按照RegistryView枚舉文檔的答案中的文檔鏈接。它告訴你使用OpenBaseKey。 –

相關問題