關於64位操作系統使用C#訪問注冊表失敗的問題


通過C#的注冊表類 Registry.GetValue 進行訪問時,其返回值一直為空。然后認真檢查檢查再檢查了注冊表路徑,發現路徑沒有一點問題,不說廢話,上代碼:

1  if (Registry.GetValue(@"HKEY_LOCAL_MACHINE\software\microsoft\office\15.0\common\installroot", "path", null) != null)
2   {
3      //office 2013 安裝路徑獲取成功。
4   }

萬般無奈的時候,突然想到系統是64位,不禁想到剛畢業時,在64位系統上使用注冊表編輯器導入軟件配置環境的問題。首先介紹一下WoW64 (Windows 32-bits on Windows 64-bit),64位系統運行32位程序時,主要是同過該部分實現的。當然在wow下也存在注冊表編輯器regedt32.exe。但是WoW64和System32中,注冊表編輯器的結果是有可能不同的,下圖是office2013的安裝路徑在WoW64和System32中的不同結果。

上圖為使用32位注冊表編輯器是的結果,此時Common下是無installroot節點的。

上圖為使用64位注冊表編輯器是的結果,完全正常。

 

說道這里,問題很明顯了。Registry.GetValue訪問注冊表是,使用了32位注冊表編輯器的結果。

為什么會這樣呢,明明是64位的系統,然后檢查了工程屬性--》生成--》常規--》目標平台,原來是將程序編譯成了32位的。將程序編譯成32位之后,32位的程序訪問注冊表的結果與上圖一一致。

將目標平台改為64位或者AnyCpu,問題即可解決。

那么問題又來了,32位程序如何訪問64位的注冊表呢?請看下文:http://www.cnblogs.com/TaiYangXiManYouZhe/p/5087248.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM