wix 自定义操作,管理员组

Posted

技术标签:

【中文标题】wix 自定义操作,管理员组【英文标题】:wix custom action, administrators group 【发布时间】:2013-09-03 20:34:54 【问题描述】:

我有一个使用 wix 构建的安装程序,其中包含在延迟模式下运行的自定义操作,并且需要本地计算机上的管理权限。

在本地计算机上使用管理员帐户时安装程序可以正常工作,但当我使用管理员组中的帐户时安装程序不能正常工作。当我试图将密钥分配给注册表时,我得到了关于权限不足的异常。使用 Impersonate="no" 不是一个选项,因为此操作还需要在本地计算机上具有管理员权限,并且不时访问不同的网络共享。我希望“网络共享访问”级别由用于安装应用程序的帐户(而不是管理员帐户)确定,但似乎无法找到解决方案 - 任何人都将不胜感激。

【问题讨论】:

你能告诉我们你的代码吗? InstallScope 是 perMachine 并且 CustomAction 看起来像这样 <CustomAction Id='LaunchFile' ExeCommand='[SourceDir]' Return='check' Execute='deferred' FileKey='SetupHelper' ></CustomAction> @gparyani 【参考方案1】:

听起来您没有正确处理 UAC。我的猜测是该安装适用于管理员用户,因为您的安全策略仅为该用户帐户禁用 UAC,但为管理员组的所有其他成员启用 UAC。

当自定义操作模拟启用了 UAC 的用户时,it uses the filtered (non-Administrators) security token。您的自定义操作假定它可以执行管理员组成员可以执行的操作,但由于您的安全令牌不包括管理员组,它会被拒绝访问。

您需要如何解决此问题取决于您的自定义操作正在执行的操作。您是正确的,它需要模拟以用户身份访问网络共享;或许您可以将自定义操作拆分为两个单独的操作:一个模拟和访问网络共享,另一个不执行管理员级别的任务。

如果您可以完全控制要安装它的计算机,则解决方法可能是在安装过程中禁用 UAC。然后您可以在安装完成后重新启用它。

【讨论】:

感谢您的链接 - 希望我能在一周前找到这个,我想这是通过大量的反复试验得出的 - 很高兴阅读这篇文章作为确认。我考虑过按照您的建议使用两个自定义操作,但最后我能够通过不接触注册表来解决这个问题。谢谢@斯蒂芬

以上是关于wix 自定义操作,管理员组的主要内容,如果未能解决你的问题,请参考以下文章

Wix延迟自定义操作访问被拒绝

Wix Bootstrapper 清单或提升的自定义操作

使用组策略部署时 WIX MSI 自定义操作未运行

如何从Wix托管引导程序或自定义操作中读取某些注册表项?

WiX 自定义引导程序 - 单实例检查

使用管理员权限在 Wix msi 中运行 .exe