Ich versuche, Registrierungsschlüssel und seine Unterschlüssel zu löschen. Meine Methode nimmt einen Registrierungsschlüssel als Zeichenfolgenargument und sucht und löscht sie dann.Warum kann ich einen Registrierungsschlüssel nicht löschen, obwohl er vorhanden ist?
Ich teste es mit diesem Schlüssel:
HKEY_LOCAL_MACHINE \ SOFTWARE \ WOW6432Node \ Microsoft \ Windows \ Currentversion \ Uninstall \ {InstallShield_ 694AFFC3-93D4-4049-AF26-78739488EB4D}
und das ist die Methode, die ich geschrieben habe:
static void RemoveRegKey(string registryKey)
{
// Split the string to get the hive, middle section, and subkey name
string[] regKeyParts = registryKey.Split('\\');
// Hive
string hive = regKeyParts[0].ToUpper();
// Name
string name = regKeyParts[regKeyParts.Length - 1];
// Middle bit
string keyPath = "";
for (int i = 1; i < regKeyParts.Length - 1; i++)
{
keyPath = keyPath + regKeyParts[i] + "\\";
}
// Create my registry key
RegistryKey regkey = null;
switch (hive)
{
case ("HKEY_LOCAL_MACHINE"):
regkey = Registry.LocalMachine;
break;
case ("HKEY_CURRENT_CONFIG"):
regkey = Registry.CurrentConfig;
break;
case ("HKEY_CURRENT_USER"):
regkey = Registry.CurrentUser;
break;
case ("HKEY_USERS"):
regkey = Registry.Users;
break;
case ("HKEY_CLASSES_ROOT"):
regkey = Registry.ClassesRoot;
break;
}
// Open the registry key (everything up to the parent of the key I want to delete
using (RegistryKey rk = regkey.OpenSubKey(keyPath, true))
{
Console.WriteLine(rk.ToString());
// This bit added to verify the subkey is present - it will output to console if found
string[] sk = rk.GetSubKeyNames();
foreach (string s in sk)
{
if (s == name) { Console.WriteLine(s); }
}
// If the subkey is present, delete it
if (regkey.OpenSubKey(name) != null)
{
Console.WriteLine("Registry key found - deleting it");
regkey.DeleteSubKeyTree(name);
}
else
{
Console.WriteLine("Could not find reg key");
}
}
}
der Schlüssel ist auf jeden Fall vorhanden, wie diese Rubrik:
string[] sk = rk.GetSubKeyNames();
foreach (string s in sk)
{
if (s == name) { Console.WriteLine(s); }
}
gibt die erwartete Ausgabe in grün dargestellt hier:
jedoch regkey.OpenSubKey(name)
ausgewertet null
, als die Ausgabe nach zeigt.
Konnte Schlüssel reg nicht finden.
Ich führe dies als ein erhöhter Benutzer, und der Schlüssel ist nicht geschützt.
überprüfen Sie dies: http://stackoverflow.com/questions/13728491/opensubkey-returns-null-for-a-registry-key-that-i-can-see-in-regedit-exe – Dexion