2012-11-12 60 views
3

我想爲下面的註冊表路徑中的'NoModify'設置一個值。 「HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ XXXX」SetValue 64bit機器註冊表

我使用下面的代碼,它只適用於X86機器。你能看出爲什麼這不適用於x64機器嗎?

// This value is correct 
RegistryView registryView = releaseFlags.Contains("PLATFORM_X86") ? RegistryView.Registry64 : RegistryView.Registry32; 

    using (RegistryKey hkeyLocalMachine = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, registryView)) 
    { 
     RegistryKey noModifyKey = hkeyLocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{xxxx}", true); //SL: Key Name 

     if (noModifyKey != null) 
     { 
      noModifyKey.SetValue("NoModify", 0); 
      noModifyKey.Flush(); 
     } 
    } 
+0

闡述 「不工作」。它是否在錯誤的註冊表中設置了值,它是否因錯誤而失敗?不要讓我們處於黑暗中。 – vladr

+1

什麼是releaseFlags? – Kiquenet

回答

0

這是我在代碼中的錯誤。

RegistryView registryView = releaseFlags.Contains("PLATFORM_X86") ? RegistryView.Registry64 : RegistryView.Registry32; 

應該如下:

RegistryView registryView = releaseFlags.Contains("PLATFORM_X86") ? RegistryView.Registry32 : RegistryView.Registry64; 
1

當你是一個64位的機器上,你的應用程序是32位 - 它應該存儲在HKLM \ SOFTWARE \ WOW6432Node而不是HKLM \ SOFTWARE \節點這些設置。

1

只要您將.NET程序編譯爲x86而不是AnyCPU,您將在任何情況下都使用適用於x86的「正確」註冊表項,因爲它將以x86形式運行。

如果您編譯爲x64AnyCPU,這可能是相當棘手,因爲它將作爲64位在x64機器上運行可能並使用「錯誤」的註冊表,其中HKLM\SOFTWARE用於x86程序是實際上HKLM\SOFTWARE\WOW6432Node