Im .NET Framework 4.0 führt Microsoft.Win32.RegistryKey.DeleteSubKeyTree() remote gegen einen XP Rechner geschossen zu einer netten Exception “The procedure number is out of range.”.
Grund: Die Win32 Funktion RegDeleteKeyEx() wird erst ab Vista in advapi32.dll unterstützt (MSDN-Thread).
Workaround: Selber rekursiv löschen, Beispiel:
      [DllImport("advapi32.dll", EntryPoint = "RegDeleteKey", SetLastError = true)]
      public static extern int RegDeleteKey(IntPtr hKey, string sSubKey);

      public static int RecurseDeleteKey(RegistryKey oKey, string sKey)
      {
         int nStatus;
         RegistryKey oSubKey;

         oSubKey = oKey.OpenSubKey(sKey);
         foreach (string sSubKey in oSubKey.GetSubKeyNames())
         {
            if ((nStatus = RecurseDeleteKey(oSubKey, sSubKey)) != 0)
            {
               try { oSubKey.Close(); } catch (Exception) { }
               return nStatus;
            }
         }
         nStatus = RegDeleteKey(oKey.Handle.DangerousGetHandle(), sKey);
         try { oSubKey.Close(); } catch (Exception) { }
         return nStatus;
      }