C# - Registry SetValue wirft UnauthorizedAccessException
Bevor Sie versuchen, diese zu beantworten mit, "führen Sie eine schnelle Google-Suche." Ich möchte darauf hinweisen, dass ich bereits. Hier ist die situation, ich habe die folgende Methode, die versucht, einen Registrierungsschlüssel ändern Wert. Das problem, das ich bekommen hab ist, dass wenn es ausgeführt wird, wirft er eine UnauthorizedAccessException obwohl ich Sie geöffnet habe, den Schlüssel als beschreibbare. Ich bin mit Visual Studio als administrator und sogar versucht, einen kleinen .exe-Datei mit einem manifest-Datei zu erzwingen als admin ausführen, die ausgeführt wird der code nicht mit Glück. Die Schlüssel bereits vorhanden ist, es nicht versucht zu gehen in der Methode CreateKey. Hier ist der code-block.
Path = "S-1-5-21-1644491937-1078145449-682003330-5490\Software\Microsoft\Windows\CurrentVersion\Policies\System"
Key = "DisableTaskMgr"
NewValue = 1
public OperationResult ModifyKey()
{
OperationResult result = new OperationResult();
if (!Path.IsNullOrEmptyTrim())
{
if (!Key.IsNullOrEmptyTrim())
{
try
{
var key = Microsoft.Win32.Registry.Users.OpenSubKey(Path, true);
if (key != null)
{
key.SetValue(Key, NewValue);
key.Close();
}
else
{
result = CreateKey();
}
}
catch (Exception ex)
{
result.SetFail("Error accessing registry", ex);
}
}
else
{
result.SetFail("Registry key was null");
}
}
else
{
result.SetFail("Registry path was null");
}
return result;
}
Muss ich manuell gehen Sie den registry-Baum, der Einstellung jedes einzelnen OpenSubKey Aufruf beschreibbar? Ich versuchte dies auch, warf noch die gleiche Fehlermeldung...
- Bitte bestätigen Sie, dass Sie können ändern Sie den Schlüssel in Frage, die regelmäßig regedit.
- Ja, ich kann das ändern der Taste auf wird die Verwendung von regedit. Ich habe admin Rechte und wie ich sagte in meinem Beitrag, ich habe versucht, erstellen Sie eine einfache .exe-Datei mit einem manifest zu zwingen, die als administrator ausgeführt werden.
- Möglicherweise möchten Sie auch zu testen unter diese mit anderen Benutzer-account oder auf einer anderen Maschine.
- Ich habe versucht diesen code zu testen auf meinem Windows XP virtual machine als auch, gleiche Problem. Auf der XP-Kiste, die Benutzer-ID war offensichtlich anders, es zieht die Benutzer-ID des aktuell angemeldeten Benutzers. Ich habe auch versucht, das ändern der Schlüssel HKEY_CURRENT_USER in der gleichen Stelle denken, dass es könnte ein Problem mit dem User, der gleiche Fehler.
- Ich habe versucht eine vereinfachte version dieser code auf meinem Windows 7-Rechner (ich hatte nicht die System\DisableTaskMgr Schlüssel-Wert-also musste ich, um es zu schaffen), und es funktionierte...
- Ich bin froh, dass es funktionierte auf einem Rechner, ich bin völlig ratlos, warum es nicht für mich arbeiten. Ich werde versuchen, neu zu starten und sehen, ob das hilft... ich bin mir nicht sicher, was anderes zu versuchen.
- Auch, welche version des .NETZ verwenden Sie? Mein test war auf .NET 4.
- Dieser ist in .NET 3.5.
- Könntest du bitte posten Sie die komplette exception-details (einschließlich call-stack), als zurückgegeben, indem die ToString () - Methode?
"System.UnauthorizedAccessException: Attempted to perform an unauthorized operation.\r\n at Microsoft.Win32.RegistryKey.Win32Error(Int32 errorCode, String str)\r\n at Microsoft.Win32.RegistryKey.SetValue(String name, Object value, RegistryValueKind valueKind)\r\n at Microsoft.Win32.RegistryKey.SetValue(String name, Object value)\r\n at somenamespace.RegistryItem.ModifyKey() in C:\\Dev\\RegistryItem.cs:line 76"
Du musst angemeldet sein, um einen Kommentar abzugeben.
im var für Ihren Schlüssel
änderung
Einem möglichen Problem, das ich sehe, mit deinem code ist, dass die
Path
variable wird gesetzt, um eine Zeichenfolge, die nicht entkommen den\
Zeichen. Wie wäre es mit etwas wie:CreateSubKey
eher alsOpenSubKey
? Es öffnet Sie für das schreiben, wenn es vorhanden ist, und schafft es anders.SetValue
Zeile, und überprüfen Sie den exakten Wert vonkey.Name
und den genauen Wert derKey
zu dieser Linie?RegistryRights = QueryValues | SetValue | CreateSubKey | EnumerateSubKeys | Notify | CreateLink | Delete | ReadPermissions | ChangePermissions | TakeOwnership
Haben Sie versucht, die Einstellung der accessrule und Berechtigungen?
Als letzten verzweifelten Versuch, um herauszufinden, was Los war, habe ich eine einfache service zu testen, dass dieser code ausgeführt wird, als das Konto lokales system. Es ist die höchste Privilegien, die ich denken konnte, um zu versuchen, und führen Sie den code mit. Läuft der code mit diesen Berechtigungen gearbeitet.
Besonderer Dank geht an 0_____0 und Charleh für den Hinweis auf das anti-virus auch. Ich habe die logs und es stellt sich heraus, es wurde versucht, die Quarantäne-meine änderungen. Ich denke auch es wird nicht aufhören, die System-Benutzer von diesen änderungen, wenn.
Besonderer Dank geht an Sorceri als auch mir geholfen haben, diese Forschung so viel.
Abschließend, wenn Sie mit intermittierenden, sehr merkwürdiges Verhalten, überprüfen Sie Ihren Viren-scanner und Berechtigungen.
Nur set räumt auf dword. Müssen Sie zum öffnen des Registrierungs-und den letzten Ordner, Pfad, Rechtes klicken Sie auf übernehmen und legen Sie Gewährt, und wählen Sie Alle Anwendungen, und überprüfen Sie die Totale Kontrolle. Ich hoffe, Ihnen zu helfen.
nur
Registry.SetValue(sub_key, key, value);
Beispiel: