2009-05-01 11 views
0
try 
{ 
    RegistryKey rkApp = Registry.CurrentUser.OpenSubKey(
     "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); 

    if (rkApp.GetValue("AdobeBitmapViewer") == null) 
    { 
     rkApp.SetValue("AdobeBitmapViewer", Application.ExecutablePath.ToString()); 
    } 
    rkApp.Close(); 
} 
catch (Exception) { } 

Dieser Code funktioniert in Windows XP, aber in Windows Vista bekomme ich eine UnauthorizedException. Gibt es eine Möglichkeit, die UAC in Vista zu umgehen, um einen Registrierungsschlüssel festzulegen?Wie lege ich einen Registrierungswert in Windows Vista mit C# fest?

Antwort

1

Ich habe gesehen, pages sagen Verwendung CreateKey im Gegensatz zu OpenKey - macht das einen Unterschied?

Möglicherweise müssen Sie als erweiterte Autorität ausgeführt werden. Dies kann example helfen.

Siehe hier für another Beispiel für die Rechtevergabe.

+0

Elevation wird für Registry.CurrentUser benötigt. – Michael

+0

Ich meine, nicht für Registry.CurrentUser benötigt. – Michael

+0

ok Überprüfen Sie die Ausnahme und sehen Sie, was fehlt. –

1

Dies sollte kein UAC-Problem sein. Der Schlüssel in Frage ist in HKCU, die normalerweise nicht durch UAC geschützt ist. UAC entfernt normalerweise Ihren Zugriff auf die Schlüssel wie HKLM.

Es ist möglich, dass ein Programm auf Vista vorbeigekommen ist und diesen Schlüssel mit Admin-Privilegien erstellt hat und Sie davon abgehalten hat, unter normalen Umständen auf den Schlüssel zu schreiben. Können Sie versuchen, false zu übergeben (bedeutet nur lesen) und sehen, ob Sie damit öffnen können? Wenn dies der Fall ist, sollten Sie sich die tatsächlichen Berechtigungen für den Schlüssel ansehen und herausfinden, was sie sind.

+0

Ich kann bestätigen, dass der Tom's Code auf meinem Vista-Rechner funktioniert. – brianpeiris

+0

Hinweis: Der Schlüssel "AdobeBitmapViewer" war auf meinem Computer nicht vorhanden. Daher wurde der Schlüssel beim Ausführen des Codes erstellt. – brianpeiris