我的.NET應用程序(any-CPU)需要讀取由32位程序創建的註冊表值。在64位Windows上,它位於註冊表中的Wow6432Node項下。我已經讀過,你不應該對Wow6432Node進行硬編碼,那麼用.NET訪問它的正確方法是什麼?如何從64位.NET應用程序中打開WOW64註冊表項
27
A
回答
12
如果您明確需要讀取64位程序中由32位程序寫入的值,則可以對其進行硬編碼。只是因爲沒有別的選擇。
我當然會將它抽象爲一個輔助函數。例如
public RegistryKey GetSoftwareRoot() {
var path = 8 == IntPtr.Size
? @"Software\Wow6432Node"
: @"Software";
return Registry.CurrentUser.OpenSubKey(path);
}
16
正確的方法是調用本機註冊表API和傳遞KEY_WOW64_32KEY
標誌RegOpenKeyEx/RegCreateKeyEx
6
擴展安德斯的回答,有一個good example of wrapping the resulting handle in a .NET RegistryKey object on Shahar Prish's blog - 一定要過,雖然閱讀註釋。
請注意,未使用的the pinvoke.net wrapper of RegOpenKeyEx充滿了問題。
52
如果您可以將目標.Net版本更改爲v4,那麼您可以使用新的OpenBaseKey函數,例如
RegistryKey registryKey;
if (Environment.Is64BitOperatingSystem == true)
{
registryKey = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64);
}
else
{
registryKey = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry32);
}
相關問題
- 1. 從32位應用程序打開64位註冊表
- 2. 從32位應用程序訪問64位註冊表
- 3. 如何從32位進程讀取64位註冊表項?
- 4. 在32位應用程序中訪問64位註冊表
- 5. 使用32位安裝程序刪除64位註冊表項
- 6. 如何註冊應用程序以打開位置
- 7. C#32位應用程序64位註冊表
- 8. 32位應用程序訪問64位註冊表
- 9. 如何從64位Windows註冊表中讀取啓動項目?
- 10. 如何在Windows 64位檢索註冊表中的應用程序列表
- 11. 如何爲WoW64和x64流程創建共享註冊表項
- 12. Vb6應用程序CRUD Windows'註冊表32或64位
- 13. 如何在32位應用程序中使用本機Windows API在64位視圖中創建註冊表項
- 14. 註冊表項在Windows 7 64位
- 15. 從32位應用讀取64位註冊表
- 16. 打開遠程註冊表子項
- 17. 如何從32位應用程序註冊64位DLL(在64位操作系統上)
- 18. 如何從c#應用程序創建註冊表項?
- 19. 從Haskell訪問64位註冊表
- 20. 如何確定註冊表項是否被WOW64重定向?
- 21. 如何讓我的應用程序訪問註冊表項,而不管它的32位或64位?
- 22. 從64位應用程序引用.net 1.1程序集
- 23. Windows註冊表 - 註冊應用程序以打開文件類型
- 24. 如何從XP下的64位註冊表中刪除?
- 25. 從64位Java應用程序(未找到註冊表項)訪問32位COM DLL
- 26. 在Wow64節點中未創建Wix安裝程序註冊表項
- 27. .NET和64位應用程序
- 28. 如何從Appcelerator Android應用程序中打開Facebook相冊?
- 29. 從網頁打開.NET應用程序
- 30. 如何使用python腳本從註冊表中刪除一個應用程序的註冊表項?
夠公平 - 謝謝Jared! – marijne 2009-07-02 14:01:41
警告:MS不支持這種方法(對「Wow6432Node」進行硬編碼)。請參閱http://msdn.microsoft.com/en-us/library/aa384232(VS.85).aspx – Richard 2009-07-30 17:23:32
-1:此行爲在Windows 7/Windows Server 2008 R2中中斷,因爲它們使用共享註冊表鍵替代:http ://msdn.microsoft.com/en-us/library/aa384253(VS.85).aspx – Powerlord 2009-08-24 13:31:53