2011-08-05 98 views
11

我想知道是否有可能在64位PC上訪問C#中的以下注冊表項。C#訪問64位註冊表

HKLM \ SOFTWARE \微軟\的Windows \ CurrentVersion \ Run中

當在32位PC訪問它工作正常,但在64它重新 - 它引導到具有不同的HKLM \ SOFTWARE \ Wow6432Node的原生64位路徑鍵。我已閱讀了關於此的各種文章,但無法真正找到關於如何在C#中的64位PC中訪問32位密鑰的明確答案。謝謝。

+1

您定位的是什麼版本的.Net框架? – Justin

+0

我使用VS 2010的.NET這樣4我猜 –

回答

5

編譯你的應用程序在x64,一切都會好的。在Visual Studio 2010中,你會怎麼做,通過改變設置下Project Properties > Build

enter image description here

對於VS Express用戶:

在VC#Express中,這個屬性被丟失,但你仍然可以如果您知道去哪裏查看,請創建一個 x86配置。

它看起來像一個很長的步驟列表,但一旦你知道這些事情在哪裏,它會容易得多。任何只有VC#Express的人都可能會覺得這很有用。一旦您瞭解配置管理器, 下次將會更加直觀。

  1. 在VC#Express中,轉至工具 - >選項。
  2. 在選項對話框的左下角,選中 說的「顯示所有設置」框。
  3. 在左側的樹形視圖中,選擇「項目和 解決方案」。
  4. 在右側的選項中,選中顯示「顯示 高級構建配置」的框。
  5. 單擊確定。
  6. 轉到生成 - >配置管理器...
  7. 在項目旁邊的平臺列中,單擊組合框,然後點擊「 」。
  8. 在「新平臺」設置中,選擇「x64」。
  9. 單擊確定。
  10. 單擊關閉。
  11. 那裏,現在你有一個x64配置!易如反掌! :-)
+0

謝謝,是隻適用於Visual Studio Pro中,我使用Express和無法找到該選項? –

+0

@Bali,我已經編輯我的答案與將*希望*工作,從http://forums.create.msdn.com/forums/t/4377.aspx#22601改編的指令。請繼續嘗試:) – foxy

+0

謝謝,多數民衆贊成在! –

1

它假設重定向。你需要檢測到這個重定向,然後讀取WoW6432Node鍵。 HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run是隻能由64位應用程序訪問的64位註冊表。

顯然你應該寫代碼來支持兩者。

+0

不正確,這是這是64的外殼讀的關鍵bit –

+0

@David - 我將不得不不同意你的評論。對於32位應用程序,重定向HKLM \ SOFTWARE \ Wow6432Node是未知的。如果您覺得您可以在我的回答中添加說明,我將不勝感激(而不是做出毫無根據的說法)。 –

+0

你是對的,我不清楚。抱歉。 'HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ Windows \ CurrentVersion \ Run'是一個沒有意義的關鍵。 Shell讀取'HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run'中的值。它有可能讀取32位區域中的值,作爲發生錯誤的程序的索引,但它是在64位部分寫入值的正確位置。 –

2

你有倒退,Wow6432Node適用於32位應用程序。因此,如果您的應用程序是32位(x86),那麼您將自動被重定向到該「節點」。

您可以使用.NET 4中的FromHandle方法來指定要使用哪個視圖,但它的用處不是很明顯,並且可能有problems

answer地址使用Win32 API,你可以在C#中利用以及這個問題。

5

項目+屬性,生成標籤,目標平臺=任何CPU。從32位應用程序訪問64位註冊表需要.NET 4以及RegistryView.Registry64選項的新RegistryKey.OpenBaseKey()方法。

這隻會讓你閱讀的關鍵,寫入鍵值需要UAC提升。您可以在沒有提升的情況下寫信給HKCU,也不需要進行註冊表重定向。