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; }