Ich versuche, allen oder allen Benutzern eines Rechners während des Installationsvorgangs Schreibzugriff auf die Registrierungseinstellungen meiner Anwendung zu gewähren.
Meine Anwendung verfügt direkt nach der Installation nicht über die entsprechenden Berechtigungen, ohne dass ein Administrator sie erteilen muss, obwohl die Schlüssel und Werte vorhanden sind, sie können nicht aktualisiert werden? Ich habe das unten stehende Snippet, aber das Installationsprogramm schlägt aufgrund von Unauthorized access / access denied fehl. Ich denke, ich bin auf dem richtigen Weg...
Wie kann ich das Berechtigungsproblem lösen, ohne dass ich manuell eingreifen muss? Gibt es einen besseren Ansatz? Ich versuche, ein zusätzliches Installationsprogramm mit dem 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);
}
}