Ich versuche, während der Installation Schreibzugriff auf die Registrierungseinstellungen meiner Anwendung allen Benutzern oder allen Benutzern einer Maschine zu gewähren.Festlegen der Schreibberechtigung für Registrierungsschlüssel mit .NET
Meine Anwendung verfügt nicht direkt nach der Installation über die entsprechenden Berechtigungen, ohne dass ein Administrator sie gewähren muss, obwohl die Schlüssel und Werte vorhanden sind. Sie können nicht aktualisiert werden. Ich habe das folgende Snippet, aber das Installationsprogramm schlägt fehl, weil der Zugriff verweigert wurde. Ich denke, ich bin auf dem richtigen Weg ...
Wie kann ich das Problem der Berechtigungen ohne manuelle Aufmerksamkeit lösen? Gibt es einen besseren Ansatz? Ich versuche, ein zusätzliches Installationsprogramm durch das Visual Studio-Setup zu ersetzen, indem ich diese Funktionalität hinzufüge.
protected void GrantAllAccessPermission(String key)
{
try
{
SecurityIdentifier sid = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
NTAccount account = sid.Translate(typeof(NTAccount)) as NTAccount;
// Get ACL from Windows, allow writing to the registry key
using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(key, true))
{
RegistrySecurity rs = new RegistrySecurity();
// Creating registry access rule for 'Everyone' NT account
RegistryAccessRule rar = new RegistryAccessRule(
account.ToString(),
RegistryRights.FullControl,
InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
PropagationFlags.None,
AccessControlType.Allow);
rs.AddAccessRule(rar);
rk.SetAccessControl(rs);
}
}
catch (System.Security.SecurityException ex)
{
throw new InstallException(
String.Format("An exception in GrantAllAccessPermission, security exception! {0}", key),
ex);
}
catch (UnauthorizedAccessException ex)
{
throw new InstallException(
String.Format("An exception in GrantAllAccessPermission, access denied! {0}", key),
ex);
}
}
ich Ihre Schnipsel verwendet versuchen, etwas ähnliches zu erreichen ... nur, damit Sie wissen, , 'Registry.LocalMachine.OpenSubKey (key)' sollte 'Registry.LocalMachine.OpenSubKey (key, true)' sein (wobei 'true' angibt, dass der Schlüssel beschreibbar sein soll). Ich lief in "UnauthorizedAccessExceptions" ohne diese Änderung. Vielen Dank! – Pwninstein
Danke dafür, Pwninstein! Es hat mich unzählige Stunden der Frustration gerettet! –