我正在尝试在安装过程中向所有用户或机器上的所有用户授予对我的应用程序注册表设置的写访问权限。即使键和值存在,我的应用程序在安装后直接没有适当的权限,需要管理员授权才能更新。我有下面的片段,但由于未经授权的访问/拒绝访问,安装程序失败了。我认为我走在了正确的道路上...
如何解决权限问题而无需手动操作?有更好的方法吗?我正在尝试通过添加此功能来使用Visual Studio设置替换额外的安装程序。
如何解决权限问题而无需手动操作?有更好的方法吗?我正在尝试通过添加此功能来使用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);
}
}
Registry.LocalMachine.OpenSubKey(key)
应该改为Registry.LocalMachine.OpenSubKey(key, true)
(其中true
表示打开可写的键)。如果没有这个更改,我会遇到UnauthorizedAccessExceptions
异常。谢谢! - Mark Carpenter