安装更改不要求 UAC 权限

Posted

技术标签:

【中文标题】安装更改不要求 UAC 权限【英文标题】:Installation change do not ask for UAC permissions 【发布时间】:2011-12-27 17:55:57 【问题描述】:

我为我们的产品实施了安装程序。 安装程序需要管理员权限,所以我使用 setup bootstrapper 和清单文件(推荐 here)在启用了 UAC 的 Windows 机器上获得这些权限。安装和卸载都很好 - 用户被要求获得许可,安装程序会做它需要做的事情。

但如果您运行控制面板程序和功能并为已安装的程序选择“更改”*,则会发生错误(自定义、来自安装程序 LaunchConditions),告诉安装程序需要管理权限。在这种情况下,我找不到任何请求权限的方法 - Windows 只是运行 MSI 文件,对所需权限一无所知。

更奇怪的是修复功能 - 它请求许可,但随后无法使用 SetupBootstrapper 执行安装期间允许的某些操作。

我发现了类似的问题here:

但在我们的案例中,建议的解决方案是不可接受的。

现在更改功能的唯一解决方法是始终使用 SetupBootstrapper,而不使用 Programs and Features 菜单,但这对用户不是很友好,并且会强制用户保持安装程序处于打开状态他/她的硬盘。

有没有更好的建议?

PS:我使用 WiX 来创建安装程序,因此很高兴听到有关 WiX 解决方案的信息,但我很确定它不依赖于安装程序创建语言,但是仅针对 MSI 细节。

【问题讨论】:

【参考方案1】:

哪些操作失败了?如果它们是您添加到安装中的操作,请确保使用Impersonate="no"Execute="deferred"(或"commit""rollback")定义此类操作,并且它们的顺序介于InstallInitializeInstallFinalize 之间.

【讨论】:

安装需要管理权限。而不是操作,但启动条件失败 - 如果通过程序和功能运行,安装程序不会获得该权限 好的,那么在这种情况下失败的条件是什么?为什么你不能改变它? Microsoft 清楚地认为 Privileged 在具有 UAC 的系统上应该几乎总是正确的。 条件检查特权属性。当然我可以改变它,但这不是解决问题的方法——它只会产生另一个问题。问题的根源是如果不使用清单文件和引导程序,msi 将作为 NOT Privileged 运行。并且无法通过程序和功能>更改/修复菜单使用它们。 现在我明白你的回答是我真正需要做的 =)。谢谢。但当时还不够清楚为什么会这样。 Windows 安装程序非常复杂,即使是我们当中最优秀的人也会感到困惑。很高兴它最终成功了!

以上是关于安装更改不要求 UAC 权限的主要内容,如果未能解决你的问题,请参考以下文章

[技术分享]借用UAC完成的提权思路分享

VS为VC++添加UAC控制(VC程序默认管理员运行)

怎么绕过权限?

禁止电脑自动乱装流氓软件

Vista/7 UAC:如何降低进程权限

启动隐藏的控制台进程,但仍然有 UAC 提示