通過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
