2013-02-10 79 views
2

我對c#相當陌生。我想實現刪除多個註冊表項一個接一個,但我是第一個關鍵和代碼停止刪除其他keys.I下面試圖提到代碼它適用於單一鍵,如果塊之後變得異常是否有可能一個接一個地刪除多個註冊表項?

string[] keyArray = { @"Wow6432Node\CLSID", 
      @"Software\Microsoft\Windows\CurrentVersion\Ext\Settings", 
      @"Software\Microsoft\Windows\CurrentVersion\Ext\Stats", 
      @"SOFTWARE\Classes\Wow6432Node\CLSID", 
      @"SOFTWARE\Wow6432Node\Classes\CLSID", 
      @"Wow6432Node\Microsoft\Code Store Database\Distribution Units", 
      @"Wow6432Node\Microsoft\Internet Explorer\ActiveX Compatibility", 
      @"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\ModuleUsage" 
    }; 

foreach (var key in keyArray) 
{ 
    try 
    { 

     RegistryKey myKey = Registry.ClassesRoot.OpenSubKey(key, true); 
     if (myKey != null) 
     { 
      /*Cisco Secure Desktop*/ 
      myKey.DeleteSubKeyTree("{705EC6D4-B138-4079-A307-EF13E4889A82}"); 
      myKey.DeleteSubKeyTree("{F8FC1530-0608-11DF-2008-0800200C9A66}"); 
      myKey.DeleteSubKeyTree("{E34F52FE-7769-46CE-8F8B-5E8ABAD2E9FC}"); 
      /*Cisco Hostscan*/ 
      myKey.DeleteSubKeyTree("{F8FC1530-0608-11DF-2008-0800200C9A66}"); 
      myKey.DeleteSubKeyTree("{E34F52FE-7769-46CE-8F8B-5E8ABAD2E9FC}"); 
      /*Cisco AnyConnect Secure Mobility Client*/ 
      myKey.DeleteSubKeyTree("{55963676-2F5E-4BAF-AC28-CF26AA587566}"); 
      myKey.DeleteSubKeyTree("{CC679CB8-DC4B-458B-B817-D447B3B6AC31}"); 
     } 
     else 
      Console.WriteLine(string.Format("could not open key: {0}", key)); 
    } 
    catch (Exception ex) 
    { 
     System.Diagnostics.Debug.WriteLine(
      string.Format("action {0} failed with\n{1}", key, ex.Message)); 

    } 
    } 
+0

for循環可以做一些很好的代碼...... – Trillian 2013-02-10 16:25:25

+4

「但我正在逐漸例外的第一碼」難道你不認爲這將是興利對我們來說是否是例外? – 2013-02-10 16:34:56

+0

System.ArgumentException:無法刪除子鍵樹,因爲子鍵不存在 。 – Madhava 2013-02-10 17:15:01

回答

0

給您的詳細信息您可以嘗試下面的代碼

string[] keyArray = { @"Wow6432Node\CLSID", 
       @"Software\Microsoft\Windows\CurrentVersion\Ext\Settings", 
       @"Software\Microsoft\Windows\CurrentVersion\Ext\Stats", 
       @"Wow6432Node\Microsoft\Code Store Database\Distribution Units", 
       @"Wow6432Node\Microsoft\Internet Explorer\ActiveX Compatibility", 
       @"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\ModuleUsage", 
       @"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\ModuleUsage", 
     }; 

foreach (var key in keyArray) 
{ 
    try 
    { 
     RegistryKey myKey = Registry.ClassesRoot.OpenSubKey(key, true); 
     if (myKey != null) 
      myKey.DeleteSubKeyTree("{55963676-2F5E-4BAF-AC28-CF26AA587566}"); 
     else 
      System.Diagnostics.Debug.WriteLine(string.Format("could not open key: {0}", key)); 
    } 
    catch (Exception ex) 
    { 
     System.Diagnostics.Debug.WriteLine(
      string.Format("action {0} failed with\n{1}", key, ex.Message)); 
    }     
} 

這應該打印出一些錯誤的信息,太。

正如您給予的註釋ArgumentException(...)嘗試打開/刪除子項{55963676-2F5E-4BAF-AC28-CF26AA587566}不存在!也許你應該看看到Registry.OpenSubKeyDeleteSubKeyTree(..)

編輯:增加了一個新的答案給出細節

private static void deleteRegistryKeys2() 
{ 
    string[] classIds = { 
        "{538793D5-659C-4639-A56C-A179AD87ED44}", 
         /*Cisco Secure Desktop*/ 
        "{705EC6D4-B138-4079-A307-EF13E4889A82}", 
        "{F8FC1530-0608-11DF-2008-0800200C9A66}", 
         /*Cisco Hostscan*/ 
        "{F8FC1530-0608-11DF-2008-0800200C9A66}", 
        "{E34F52FE-7769-46CE-8F8B-5E8ABAD2E9FC}", 
         /*Cisco AnyConnect Secure Mobility Client*/ 
        "{55963676-2F5E-4BAF-AC28-CF26AA587566}", 
        "{CC679CB8-DC4B-458B-B817-D447B3B6AC31}" 
        }; 

    string[] regKeys = { @"Wow6432Node\CLSID", 
         @"Software\Microsoft\Windows\CurrentVersion\Ext\Settings", 
         @"Software\Microsoft\Windows\CurrentVersion\Ext\Stats", 
         @"SOFTWARE\Classes\Wow6432Node\CLSID", 
         @"SOFTWARE\Wow6432Node\Classes\CLSID", 
         @"Wow6432Node\Microsoft\Code Store Database\Distribution Units", 
         @"Wow6432Node\Microsoft\Internet Explorer\ActiveX Compatibility", 
         @"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\ModuleUsage" 
        }; 

    // iterate every regKey 
    foreach (var regkey in regKeys) 
    { 
     // go for each classId 
     foreach (var classId in classIds) 
     { 
      // get a regKey within a hive, pass classId too 
      deleteKey(Registry.ClassesRoot.OpenSubKey(regkey, true), classId); 

      deleteKey(Registry.CurrentUser.OpenSubKey(regkey, true), classId); 
      deleteKey(Registry.LocalMachine.OpenSubKey(regkey, true), classId); 
     } 
    } 
    Console.WriteLine("Cleanup finished. Press any key to exit"); 
    Console.ReadLine(); 
} 

private static void deleteKey(RegistryKey registryKey, string classId) 
{ 
    // check if there is a key 
    if (registryKey != null) 
    { 
     try 
     { 
      // try to remove classId within this regKey 
      registryKey.DeleteSubKeyTree(classId); 
     } 
     catch (Exception ex) 
     { 
      Debug.WriteLine(ex.Message); 
      Console.WriteLine(
       string.Format("could not delete key {0} with classId {1}", 
        registryKey, classId)); 
     } 
    } 
} 
+0

數組中的鍵存在於不同的配置單元中,但不在相同的配置單元類根中上述代碼是否適用於不同的配置單元? – Madhava 2013-02-10 18:35:42

+0

我的代碼通過keyArray(包含您的配置單元)循環並嘗試*刪除一個subKeyTree *'{55963676-2F5E-4BAF-AC28-CF26AA587566}' - 如果失敗,將會打印出錯誤消息! – 2013-02-10 18:44:46

+0

我試過了,但是upvote需要15票才能解決我的問題,因爲我是這個論壇的新手 – Madhava 2013-02-10 21:41:37

0

最後我有更好的代碼,其工作後,大量的努力,請讓我知道如果任何人都可以做的更好

namespace ConsoleApplication1 
    { 
    class Program 
    { 
    static void Main(string[] args) 
    { 
     string[] clsids = { 
          "{538793D5-659C-4639-A56C-A179AD87ED44}", 
           /*Cisco Secure Desktop*/ 
          "{705EC6D4-B138-4079-A307-EF13E4889A82}", 
          "{F8FC1530-0608-11DF-2008-0800200C9A66}", 
           /*Cisco Hostscan*/ 
          "{F8FC1530-0608-11DF-2008-0800200C9A66}", 
          "{E34F52FE-7769-46CE-8F8B-5E8ABAD2E9FC}", 
          /*Cisco AnyConnect Secure Mobility Client*/ 
          "{55963676-2F5E-4BAF-AC28-CF26AA587566}", 
          "{CC679CB8-DC4B-458B-B817-D447B3B6AC31}" 

          }; 


     string[] keys = { @"Wow6432Node\CLSID", 
           @"Software\Microsoft\Windows\CurrentVersion\Ext\Settings", 
           @"Software\Microsoft\Windows\CurrentVersion\Ext\Stats", 
           @"SOFTWARE\Classes\Wow6432Node\CLSID", 
           @"SOFTWARE\Wow6432Node\Classes\CLSID", 
           @"Wow6432Node\Microsoft\Code Store Database\Distribution Units", 
           @"Wow6432Node\Microsoft\Internet Explorer\ActiveX Compatibility", 
           @"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\ModuleUsage" 
}; 

     /*Classes root hive*/ 

     for (int i = 0; i<=7; i++) 
     { 
     foreach (var regkey in keys) 
     { 
      try 
      { 

      using (RegistryKey mykey = Registry.ClassesRoot.OpenSubKey(regkey, true)) 
        if (mykey != null) 
        { 
         Console.WriteLine(mykey + @"\"+clsids[i]); 
         mykey.DeleteSubKeyTree(clsids[i]); 

        } 

        else 
        { 
         Console.WriteLine("key does not exist"); 
        } 

       /*try end*/ 
      } 
      catch 
      { 
       continue; 
      } 


     } 
     } 

     /*Current user hive*/ 

     for (int i = 0; i <= 7; i++) 
     { 
      foreach (var regkey in keys) 
      { 
       try 
       { 

      using (RegistryKey mykey = Registry.CurrentUser.OpenSubKey(regkey, true)) 
         if (mykey != null) 
         { 
          Console.WriteLine(mykey + @"\" + clsids[i]); 
          mykey.DeleteSubKeyTree(clsids[i]); 

         } 

         else 
         { 
          Console.WriteLine("key does not exist"); 
         } 

        /*try end*/ 
       } 
       catch 
       { 
        continue; 
       } 


      } 
      } 

     /*Local Machine hive*/ 

     for (int i = 0; i <= 7; i++) 
     { 
      foreach (var regkey in keys) 
      { 
       try 
       { 
      using (RegistryKey mykey = Registry.LocalMachine.OpenSubKey(regkey, true)) 
         if (mykey != null) 
         { 
          Console.WriteLine(mykey + @"\" + clsids[i]); 
          mykey.DeleteSubKeyTree(clsids[i]); 

         } 

         else 
         { 
          Console.WriteLine("key does not exist"); 
         } 

        /*try end*/ 
       } 
       catch 
       { 
        continue; 
       } 


      } 
      } 

     Console.WriteLine("Cleanup finished. Press any key to exit"); 
     Console.ReadLine(); 
    } 
    } 
    } 
+0

爲我以前的文章添加了新的答案 - 看看! – 2013-02-13 15:34:33

相關問題