2013-02-10 78 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

相关问题