2011-09-16 35 views
1

我想從註冊表中刪除以下節點。我該怎麼做?C#中的註冊表管理#

HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{D9AC2148-5E15-48AD-A693-E48714592381} 

我有這麼多:

string key = "D9AC2148-5E15-48AD-A693-E48714592381"; 
StringBuilder sb = new StringBuilder(key); 
RegistryKey k = Registry.ClassesRoot.OpenSubKey("Wow6432Node\\CLSID", true); 

我該如何繼續?

+2

查看Jon Skeet的答案在這裏:http://stackoverflow.com/questions/531151/how-to-delete-registry-value-in-c – Otiel

+2

什麼'sb'與任何事情有關。 –

回答

1

你可以使用DeleteSubKey方法:

string key = "{D9AC2148-5E15-48AD-A693-E48714592381}"; 
Registry.ClassesRoot.DeleteSubKey(@"Wow6432Node\CLSID\" + key); 
+0

不適用於32位目標 –

+0

@Darin Dimitrov包裝GUID的大括號是什麼意思。當我沒有大括號使用時,我無法打開子鍵。但我用{D9 ... 81},我可以打開它。 – Rauf

+0

@Rauf,他們只是名字的一部分,所以應該包括在內。 –

2

你需要考慮到registry redirection;這是真正的問題。在32位機器上,您需要的密鑰在路徑中沒有WoW6432Node。

您正在嘗試從註冊表的32位視圖中刪除

HKEY_CLASSES_ROOT\CLSID\{D9AC2148-5E15-48AD-A693-E48714592381} 

。微軟很清楚,你不應該硬編碼WoW6432Node在您的應用程序:

重定向鍵映射到Wow6432Node下的物理位置。例如,HKEY_LOCAL_MACHINE \ Software被重定向到HKEY_LOCAL_MACHINE \ Software \ Wow6432Node。但是,重定向的密鑰的物理位置應該被系統保留。應用程序不應直接訪問密鑰的物理位置,因爲此位置可能會更改。

那麼通過調用

DeleteSubKey(@"HKEY_CLASSES_ROOT\CLSID\{D9AC2148-5E15-48AD-A693-E48714592381}") 

刪除鍵,但使用重定向器,以確保您的註冊表的32位視圖操作。

在.NET中,你可以通過兩種方式實現你所需要的。

  1. 目標x86並讓重定向爲您工作。
  2. 如果您的目標是x64或AnyCPU,則需要使用RegistryView.Registry32(.NET 4中的新增功能)才能打開註冊表的32位視圖。如果你沒有.NET 4,那麼你必須P/Invoke