我正在運行我的應用程序,編譯爲x86,並且它在64位Windows上運行。從同一應用程序讀取和寫入x86和x64註冊表項
爲了解決ClickOnce文件關聯問題,我想從註冊表的x86視圖中讀取一些CLSID值,然後將它們寫入到x64視圖。
要清楚,這意味着從x86應用程序我想要同時從x86註冊表視圖中讀取,然後寫入到x64註冊表視圖。我想獲取我在HKEY_CURRENT_USER\Software\Classes\CLSID\{my clsid}
下找到的值,並將它們寫入HKEY_CURRENT_USER\Software\Classes\Wow6432Node\CLSID\{my clsid}
。
我該怎麼做?使用RegistryView
會產生意想不到的結果。例如,這OpenSubKey
調用返回NULL:
keyPath = @"Software\Classes\CLSID\" + clsid;
var regularx86View = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry32);
var regularClassKey = regularx86View.OpenSubKey(keyPath, RegistryKeyPermissionCheck.ReadSubTree);
如果我使用RegistryView.RegistryDefault
或RegistryView.Registry64
而返回的關鍵 - 但我希望它使用Registry64
何時返回null,因爲該密鑰不會在64看法存在並且不應該發生重定向。
正在使用RegistryView
要做的事情,還是應該直接使用WinAPI?
謝謝@Zipper,你的答案是正確的 - 我在我的腦子裏的東西后到前(這不是很明顯,Registry32從Wow6432Node節點撿東西)。 – slugster 2013-03-15 07:03:19
@ Zipper我有一些疑惑。 32位應用程序可以訪問註冊表的64位配置單元。我不確定這一點。 – 2013-03-15 07:34:03
只是一個側面說明:如果您在.NET4之前使用.NET,這種方法將不適用於您.. – Luke 2015-03-19 15:21:06