2016-07-17 35 views
4

我想在註冊表中爲x64和x86編輯特定值(類型REG_SZ),但SetValue方法不會更改x86的值。 x64工作正常。這是我的代碼:Registry.SetValue不適用於x86

RegistryKey regKeySpecific = RegistryKey.OpenBaseKey(
            RegistryHive.LocalMachine, RegistryView.Registry32); 

RegistryKey registryKey = regKeySpecific.OpenSubKey(
    "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FolderDescriptions\\{B4BFCC3A-DB2C-424C-B029-7FE99A87C641}\\PropertyBag", true); 

registryKey.SetValue("ThisPCPolicy", "Show", RegistryValueKind.String); 

registryKey.Close(); 

我使用的第一行代碼的RegistryView.Registry32參數改變86註冊表中的值,但是這是行不通的。

該問題已確定,但尚未解決。此代碼總是變化在64位(WOW6432Node)註冊表鍵值:

"SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FolderDescriptions\\{B4BFCC3A-DB2C-424C-B029-7FE99A87C641}\\PropertyBag" 
+0

@HansPassant看看我的代碼。我正在使用RegistryKey.OpenBaseKey或者是否有錯? – Struct

+0

好的,你爲什麼在使用Registry32的時候使用Registry32? Explorer是一個64位程序。最好的方法是讓程序也可以在64位模式下運行。右鍵單擊您的EXE項目>屬性>編譯選項卡>平臺目標= AnyCPU並且選擇32位未選中。 –

+0

沒錯。但我想從資源管理器中刪除ThisPC文件夾。如果您使用Notepad ++等x86應用程序並打開文檔,則文件夾已存在。因此,我必須編輯x64和x86位置的密鑰 – Struct

回答

10

你顯然有86(32位)模式下執行的程序。 64位的Windows註冊表進行重定向爲32位應用程序,讓試圖訪問

SOFTWARE\Microsoft

將代替訪問

SOFTWARE\WOW6432Node\Microsoft

Registry32標誌使得可用於.NET應用程序運行相同的重定向作爲x64。它對你沒有任何影響,因爲操作系統已經打開了重定向。

要在32位進程的64位操作系統上訪問SOFTWARE\Microsoft,應使用Registry64標誌來禁用重定向。

記住(你的問題有這個向後)

  • SOFTWARE\是本機註冊表,在64位操作系統

  • SOFTWARE\WOW6432Node\ 64位是在64的32位兼容性註冊表位操作系統

WOW64不是提供64位支持的層。當操作系統是64位時,它是提供32位應用程序支持的層。它的意思是「(支持)Windows(32)在Windows64上」。

相關問題