我想知道是否有可能在64位PC上訪問C#中的以下注冊表項。C#訪問64位註冊表
HKLM \ SOFTWARE \微軟\的Windows \ CurrentVersion \ Run中
當在32位PC訪問它工作正常,但在64它重新 - 它引導到具有不同的HKLM \ SOFTWARE \ Wow6432Node的原生64位路徑鍵。我已閱讀了關於此的各種文章,但無法真正找到關於如何在C#中的64位PC中訪問32位密鑰的明確答案。謝謝。
我想知道是否有可能在64位PC上訪問C#中的以下注冊表項。C#訪問64位註冊表
HKLM \ SOFTWARE \微軟\的Windows \ CurrentVersion \ Run中
當在32位PC訪問它工作正常,但在64它重新 - 它引導到具有不同的HKLM \ SOFTWARE \ Wow6432Node的原生64位路徑鍵。我已閱讀了關於此的各種文章,但無法真正找到關於如何在C#中的64位PC中訪問32位密鑰的明確答案。謝謝。
編譯你的應用程序在x64,一切都會好的。在Visual Studio 2010中,你會怎麼做,通過改變設置下Project Properties > Build
對於VS Express用戶:
在VC#Express中,這個屬性被丟失,但你仍然可以如果您知道去哪裏查看,請創建一個 x86配置。
它看起來像一個很長的步驟列表,但一旦你知道這些事情在哪裏,它會容易得多。任何只有VC#Express的人都可能會覺得這很有用。一旦您瞭解配置管理器, 下次將會更加直觀。
- 在VC#Express中,轉至工具 - >選項。
- 在選項對話框的左下角,選中 說的「顯示所有設置」框。
- 在左側的樹形視圖中,選擇「項目和 解決方案」。
- 在右側的選項中,選中顯示「顯示 高級構建配置」的框。
- 單擊確定。
- 轉到生成 - >配置管理器...
- 在項目旁邊的平臺列中,單擊組合框,然後點擊「 」。
- 在「新平臺」設置中,選擇「x64」。
- 單擊確定。
- 單擊關閉。
- 那裏,現在你有一個x64配置!易如反掌! :-)
謝謝,是隻適用於Visual Studio Pro中,我使用Express和無法找到該選項? –
@Bali,我已經編輯我的答案與將*希望*工作,從http://forums.create.msdn.com/forums/t/4377.aspx#22601改編的指令。請繼續嘗試:) – foxy
謝謝,多數民衆贊成在! –
它假設重定向。你需要檢測到這個重定向,然後讀取WoW6432Node鍵。 HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run是隻能由64位應用程序訪問的64位註冊表。
顯然你應該寫代碼來支持兩者。
不正確,這是這是64的外殼讀的關鍵bit –
@David - 我將不得不不同意你的評論。對於32位應用程序,重定向HKLM \ SOFTWARE \ Wow6432Node是未知的。如果您覺得您可以在我的回答中添加說明,我將不勝感激(而不是做出毫無根據的說法)。 –
你是對的,我不清楚。抱歉。 'HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ Windows \ CurrentVersion \ Run'是一個沒有意義的關鍵。 Shell讀取'HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run'中的值。它有可能讀取32位區域中的值,作爲發生錯誤的程序的索引,但它是在64位部分寫入值的正確位置。 –
你有倒退,Wow6432Node適用於32位應用程序。因此,如果您的應用程序是32位(x86),那麼您將自動被重定向到該「節點」。
您可以使用.NET 4中的FromHandle方法來指定要使用哪個視圖,但它的用處不是很明顯,並且可能有problems。
這answer地址使用Win32 API,你可以在C#中利用以及這個問題。
如果您靶向.NET Framework版本4.0或以上,那麼你可以通過打開所需的註冊表項時傳遞RegistryView.Registry32值做到這一點。
如果您要定位.Net Framework的早期版本,那麼您需要使用P/Invoke直接撥打RegOpenKeyEx來讓您通過KEY_WOW64_32KEY標誌。
這裏有一個指南,進入更多細節:
布里爾,歡呼聲! –
項目+屬性,生成標籤,目標平臺=任何CPU。從32位應用程序訪問64位註冊表需要.NET 4以及RegistryView.Registry64選項的新RegistryKey.OpenBaseKey()方法。
這隻會讓你閱讀的關鍵,寫入鍵值需要UAC提升。您可以在沒有提升的情況下寫信給HKCU,也不需要進行註冊表重定向。
您定位的是什麼版本的.Net框架? – Justin
我使用VS 2010的.NET這樣4我猜 –