| 

.NET C# Java Javascript Exception

2
Hallo Leute,

ich bekomme folgende Fehlermeldung beim Löschen von bestimmten Registryschlüsseln, was mich doch etwas wundert, weil ich 1) Adminrechte habe und 2) meine Funktion mir auch Schreibrechte gewährt (schließlich kann ich auch problemlos andere Schlüssel problemlos löschen).

DeleteKey ist meine Funktion, die einen bestimmten Schlüssel mit einem bestimmten Unterschlüssel löschen soll.

WriteRegFile ist eine selbstgeschriebene Funktion, die mir - bevor die Schlüssel samt aller Werte - die Schlüssel erstmal irgendwo speichert (in eine Datei), damit ich noch ein Backup für alle Fälle habe.


Code:
private void DeleteKey(RegistryKey basekey, string subkey)
{
try
{
RegistryKey k = basekey.OpenSubKey(subkey, true);
if (k != null)
{
WriteRegFile(k, backupRegistry);

string[] subkeys = k.GetSubKeyNames();
if (subkeys.Length > 0)
{
for (int i = 0; i < subkeys.Length; i++)
{
DeleteKey(k, subkeys[i]);
}
}
basekey.DeleteSubKeyTree(subkey);
}
else
{
errorList.Add(String.Format("{0}\{1} doesn't exist anymore!", basekey, subkey));
}
}
catch (Exception exc)
{
errorList.Add(String.Format("ERROR DELETING KEY {0}\{1}: {2}", basekey, subkey, exc.Message));
}
}


Fehlermeldung:

Zitat:
In den Registrierungsschlüssel kann nicht geschrieben werden.


Das komische ist, dass das nur bei Schlüsseln passiert, die ein Interface darstellen (also bspw.
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{... }

). Unterschlüssel von so einem Schlüssel kann ich problemlos löschen. Andere Schlüssel kann ich auch ohne Probleme löschen.

Habt ihr eine Ahnung woran das liegen könnte ?
20.10.2011
starki 603 1 8
2
Ich kann dir eigentliche Frage nicht beantworten, vielleicht kann es M$, denn die liefern jedenfalls Windows 7 so aus. Ich habe auch, auch als Admin, lediglich Lesezugriff auf Unterschlüssel von HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\, und kann mir den Vollzugriff auch nicht holen, kriege nur ein lapidares "Access denied". Du kannst ja mal versuchsweise die UAC / Benutzerkontensteuerung runterregeln und dann versuchen, dir die Rechte zu holen: regedit, zum Schlüssel navigieren, Rechtsklick, Permissions, dann weiter wie bei Windowsrechten im Dateisystem.
mupan 20.10.2011
Naja, ich arbeite aktuell in Windows XP, aber das Problem wird sicherlich dann auch wieder auftauchen, wenn ich es auf Windows Vista / 7 testen will.

Dann wäre ja noch folgende Frage zu beantworten: Angenommen, ich schaffe es alle Unterschlüssel von einem Interface zu löschen, nur den obersten Schlüssel (mit der ID) nicht, ist sowas problematisch?

Eine andere Vermutung die ich grad hatte, wäre, dass meine Interfaces ja auf TypeLibs zugreifen, dass ich erst die Einträge der TypeLibs lösche und dann die der Interfaces ... aber da fehlen mir noch Informationen.
starki 20.10.2011
1
+1 Berechtigung ist auch meine Vermutung: In diesem Bereich hat auch der Admin häufig nur Leserechte. Über Permission/Berechtigung auf den Schlüssel lässt dich das ändern.
Jürgen Luhr 20.10.2011
Kann es ein Problem sein, dass du den Subkey noch geöffnet hast, wenn du den SubKeyTree löschen willst?
Eiger 20.10.2011
Hmm, ok, wahrscheinlich nicht, sonst würds bei den anderen auch nicht funktionieren... Na gut.
Eiger 20.10.2011
@Jürgen Luhr: Aber wenn der Admin nur Leserechte bei den Interfaces hätte ... warum kann ich alle Unterschlüssel löschen, aber sobald ich alle Unterschlüssel gelöscht habe und den Vaterschlüssel [...]\Interface\{ID} löschen will, kommt eine Fehlermeldung.

Irgendwie schon komisch ...
starki 20.10.2011
Hast du die Rechte für den Vaterschlüssel geprüft. Ich kann hier auch nur mutmaßen und es nicht prüfen.
Jürgen Luhr 20.10.2011
1 Antwort
0
Was passiert denn, wenn Du für einen solchen Key auf der Kommandoebende reg.exe delete ... eingibst? Wenn das auch nicht geht, liegt's jedenfalls nicht an Deinem Programm ;-)
Hilfe über reg.exe delete /?
23.10.2011
ABarchfeld 131 1
Am Schluss lag es nicht an den Berechtigungen, sondern an meinem Algorithmus, der ein zwei Fehler hatte. Trotzdem dank an alle für ihre Hilfe.
starki 25.10.2011
Kannst du grob sagen, was das Problem war? Vielleicht hilft es dem ein oder anderen mal...
Eiger 25.10.2011
1
Mein Problem war folgendes: Im ersten Schritt habe ich die Registry nach Einträgen mit bestimmten Suchmustern gesucht und gesammelt. Im zweiten Schritt habe ich gewissen Teile nochmal durchsucht, die einen Verweis auf einen Eintrag im ersten Suchlauf hatten, die aber nicht den Suchmustern im ersten Durchlauf entsprechen (und deswegen auch im ersten Schritt nicht gefunden werden konnten). Es hat einfach an dem mitloggen der Schlüssel im zweiten Durchlauf gehapert.
starki 25.10.2011

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH