2011-07-23 112 views
0

我正在嘗試創建一個更新程序,它在更新時將內部版本號寫入主程序在檢查更新時讀取的Windows 7註冊表中。我已經在微軟的頁面上瀏覽了UAC虛擬化,並且什麼也沒有發現。我app.manifest有在Windows 7上訪問註冊表C#

<requestedExecutionLevel level="highestAvailable" uiAccess="false" /> 

,然而,當我在HKEY_LOCAL_MACHINE \ SOFTWARE看構建項是不存在的,我不甚至可以看到它在HKEY_USERS \ _Classes \ VirtualStore \計算機\軟件無論是。

我使用進入註冊表的代碼是

  Registry.LocalMachine.CreateSubKey("SOFTWARE\\build"); 
     RegistryKey myKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\build", true); 

     myKey.SetValue("build", "3", RegistryValueKind.String); 

任何意見/建議嗎?

+0

什麼是您的構建目標平臺? x86,x64或anyCpu? –

+0

當你說它不在'HKEY_USER'中時,你的意思是它不在'HKCU \ Software'中,或者不在UAC虛擬化區域中? –

+0

爲x86構建... @Ben Voigt - 它不在其中。我在更新程序的運行時檢查了兩者。 –

回答

1

如果您的應用靶向x86平臺,在x64系統上運行時,它會使用相應的註冊表節點具有以下名稱:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ HKEY_CURRENT_USER或\ SOFTWARE \ Wow6432Node。因此,如果您將平臺目標設置爲x86版本,則在x86系統上它將在HKEY_LOCAL_MACHINE \ SOFTWARE下運行,而在x64系統上,它將在HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node下運行,這是WOW64上運行的應用程序的預留節點(Windows 64位上的Windows 32位)模式。

欲瞭解更多信息,請參閱Registry Reflection