Я пытаюсь предоставить доступ на запись к настройкам реестра моего приложения всем или всем пользователям компьютера в процессе установки.
Мое приложение не имеет соответствующих разрешений сразу после установки, не требуя от администратора предоставления их, даже если ключи и значения существуют, их нельзя обновить? Ниже приведен фрагмент кода, но программа установки не работает из-за несанкционированного доступа / доступа запрещен. Я думаю, что я на правильном пути ...
Как я могу решить проблему с разрешениями, не требуя ручного вмешательства? Есть ли лучший подход? Я пытаюсь заменить дополнительный установщик установщиком Visual Studio, добавив эту функцию.
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);
}
}