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"

InformationsquelleAutor Middas | 2012-08-01
Schreibe einen Kommentar