【问题标题】:Rights elevation with UAC使用 UAC 提升权限
【发布时间】:2017-04-13 04:52:38
【问题描述】:

我刚刚开发了一个能够自我修补的 .NET 程序。

我注意到只有在我选择“以管理员身份运行”时才会运行修补过程。

看来我需要“创建并嵌入一个应用程序清单”,根据这个:

https://msdn.microsoft.com/en-us/library/bb756929.aspx

所以我的问题:

像我这样的应用程序(可以自行修补)需要管理员权限是否正常,这是我应该走的路线吗?

谢谢

【问题讨论】:

  • 为什么用 NSIS 标记?

标签: nsis uac elevated-privileges


【解决方案1】:

如果您的应用程序通常不需要提升,那么我不建议您在清单中请求它,因为这会让您的用户非常恼火。 Firefox 使用 NT 服务绕过 UAC 对话框,但我也不建议这样做,除非您的更新非常频繁。

我建议您编写一个小更新程序来进行修补。它可以在其清单中请求提升,这样用户只需在有需要修补的东西时提升。如果您不希望捆绑包中包含另一个 .exe,可以在需要修补时使用 runas verb 再次执行自己。

【讨论】:

  • 目前它的工作方式是 Patcher 是一个 exe,每次运行程序时都会首先运行它。 Patcher 下载一个版本文件并检查当前下载的版本是否与文件中的内容相同。如果不是,则继续进行修补,如果是,则它只是启动主可执行文件。所以 Patcher 每次都会运行,我想我会在 Patcher 上放一个清单?这是否意味着每次都需要批准?还是 UAC 会记住用户批准了它
  • 这意味着你每次都会得到 UAC 对话框。检查您的主应用程序中的更新,只有在有任何需要修补的情况下才启动修补程序。
  • 我设法更改了 NSIS 脚本,以授予“用户”对 Program Files 中我的应用程序文件夹的写入权限,这解决了问题。
  • 给每个人写权限是一个安全问题。
【解决方案2】:

编辑了 NSIS 脚本以包含这一行:

AccessControl::GrantOnFile \"$INSTDIR" "(S-1-5-32-545)" "FullAccess"

这使用户帐户可以完全访问 Program Files 中的应用程序文件夹,这意味着我的修补程序可以毫无问题地写入它。

【讨论】:

  • 这违背了所有安全最佳实践,只有管理员才能修改共享的可执行文件。
  • 这似乎是业界巨头使用的方法(Epic Games,Steam,Battle.net)。
  • 我认为 Steam 使用了服务?您可以尝试运行 Windows 徽标测试,我相信它会将草率的 ACL 检测为问题。
猜你喜欢
  • 1970-01-01
  • 2011-06-07
  • 2011-07-08
  • 2011-05-21
  • 2013-06-14
  • 2022-01-14
  • 1970-01-01
  • 2011-10-16
  • 1970-01-01
相关资源
最近更新 更多