2012-02-07 96 views
0

如果有人能幫我解決我遇到的問題,我將不勝感激。無法訪問Windows Server 2008企業版上的HKEY_CLASSES_ROOT Installer

我在C#寫了一個簡單的程序,以檢查是否存在以下項 HKEY_CLASSES_ROOT \ Installer程序\ UpgradeCodes \ product_upgrade_GUID

它在所有Windows返回true(如果該鍵存在),除了在Windows Server企業2008年的x64 SP2雖然密鑰存在,但它返回System.NullReferenceException。 其實,如果我嘗試訪問\ Installer註冊表中的任何鍵,我會得到NullReferenceException。它看起來像這個安裝程序密鑰是以某種方式保護。 嘗試訪問「HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Installer \ UpgradeCodes」鍵時發生同樣的事情。

下面的代碼應返回 「HKEY_CLASSES_ROOT \ Installer程序」,但它返回的NullReferenceException:

RegistryKey rk = Registry.ClassesRoot.OpenSubKey(@"Installer"); 
return rk.ToString(); 

有誰知道訪問安裝的Windows註冊表進行任何限制? (UAC被禁用,用戶爲admin)

謝謝

+0

CAn您以管理員身份訪問註冊表中的註冊表項。 – 2012-02-07 17:10:56

回答

1

最有可能你是在64位系統上運行32位程序和registry redirector正在你對註冊表的32位視圖。那些鑰匙不存在的地方。

選項包括:

  • 打開使用RegistryView枚舉註冊表的64位視圖。請注意,這需要.net 4.對於舊版本的.net,您需要使用p/invoke從32位進程讀取註冊表的64位視圖。
  • 切換到64位進程。
+0

嗨, 我不得不使用.net 3.5,但我不認爲問題是註冊表重定向。 我已經檢查過,我可以訪問安裝程序以外的任何註冊表。 例如,如果我創建密鑰HKEY_CLASSES_ROOT \ Installer11 \ 我可以訪問它。 – harrygg 2012-02-07 18:56:37

+0

你的過程是32位嗎? – 2012-02-07 19:31:44

+0

是的,它是32位。我可以使它成爲64位,因爲它不會在32位操作系統上運行。 – harrygg 2012-02-08 07:27:16

相關問題