UnauthorizedAccessException in ComRegisterFunction beim Zugriff auf die Registrierung unter Win 7 64
-
19-09-2019 - |
Frage
Ich habe eine [ComRegisterFunction], die ich verwende, um eine BHO Internet Explorer-Erweiterung zu registrieren.Während der Registrierung auf 64-Bit-Windows 7-Maschinen wird eine nicht autorisierte Accessexception auf den Anruf zum SubKey.setValue ("Noexplorer", 1) geworfen.
In der Registrierung scheinen sich BHOs unter @ \HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\explorer\Browser Helper Objects zu befinden, ich erhalte jedoch die gleiche Ausnahme, wenn ich versuche, mich dort zu registrieren.Jede Hilfe wäre dankbar.
[ComRegisterFunction]
public static void RegisterBho(Type type) {
string BhoKeyName= "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Browser Helper Objects";
RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(BhoKeyName, true) ??
Registry.LocalMachine.CreateSubKey(BhoKeyName);
if(registryKey == null) throw new ApplicationException("Unable to register Bho");
registryKey.Flush();
string guid = type.GUID.ToString("B");
RegistryKey subKey = registryKey.OpenSubKey(guid) ?? registryKey.CreateSubKey(guid);
if (subKey == null) throw new ApplicationException("Unable to register Bho");
subKey.SetValue("NoExplorer", 1);
registryKey.Close();
subKey.Close();
}
Lösung 2
Herausgefunden.Ich musste Folgendes hinzufügen, damit es funktionierte.Ich bin mir nicht sicher, warum es in anderen Versionen des Betriebssystems funktionierte
RegistrySecurity rs = new RegistrySecurity();
rs.AddAccessRule(new RegistryAccessRule(user,
RegistryRights.FullControl,
InheritanceFlags.ObjectInherit,
PropagationFlags.InheritOnly,
AccessControlType.Allow));
RegistryKey subKey = registryKey.OpenSubKey(guid) ?? registryKey.CreateSubKey(guid, RegistryKeyPermissionCheck.Default, rs);
Andere Tipps
Sie müssen mit Administratorrechten ausgeführt werden.