如何让 WiX 安装程序请求管理权限?

Posted

技术标签:

【中文标题】如何让 WiX 安装程序请求管理权限?【英文标题】:How do I get WiX installer to request administrative privileges? 【发布时间】:2012-12-30 04:00:03 【问题描述】:

我们有一个内部开发的程序。我们正在升级以使用 Visual Studio 2012,因此必须保留 Visual Studio 安装程序项目。如果已经安装了应用程序,InstallShield LE 会给我们带来快捷方式问题。这让我最终选择了 WiX。

我已经对此进行了几天的研究,并阅读了几篇关于如何获得管理员权限的帖子,但似乎没有一个有效。 Package 元素具有 InstallPrivileges="1" 并且存在以下 Property 元素:

<Property Id="MSIUSEREALADMINDETECTION" Value="1" />

它在启动时不会请求管理员权限,因此在尝试在C:\Program Files(x86)中创建程序文件夹时失败。

【问题讨论】:

MSI 在InstallExecuteSequence 之前不会请求管理员权限。要从一开始就获得管理员权限,您必须使用引导程序,请查看 WIX 提供的 Burn Engine。 如果您的包是按机器安装的,那么 MSI 引擎会自动请求 UAC 提升。难道你的包是每个用户的,但仍然试图写入程序文件? ALLUSERS 属性是否设置为 1? 感谢两位的建议。致 Natalie:我不能使用引导程序。输出必须是 MSI(其他人将升级链接硬编码到当前应用程序中)。我添加了以下内容,我不确定哪个(或什么组合)给了我我需要的东西,但它现在可以工作:InstallPrivileges="elevated" AdminImage="yes" InstallScope="perMachine" @OpusKrokus 您可以将其发布为答案并接受它。事实上,我强烈建议你这样做。 WiX installer should always run as administrator的可能重复 【参考方案1】:

回答如何让 WiX 安装程序请求管理权限

Opus Krokus 在comment 中找到的解决方案。

回答

我添加了以下内容(到 Package 元素中),我不确定哪个(或什么组合)给了我我需要的东西,但它现在可以工作:InstallPrivileges="elevated" AdminImage="yes" InstallScope="perMachine "

【讨论】:

我认为正确的是InstallPrivileges。我删除了AdminImage 属性,我的包仍在请求管理权限。 AdminImage 似乎意味着另一回事,请参阅:***.com/a/15434458/145349 InstallScope="perUser" 有可能吗?我无法为每个用户设置提升的权限。 您必须使用InstallScope="perMachine" 才能完成这项工作。【参考方案2】:

查看this Stack Overflow question的答案。

这里是答案的精髓:

<Property Id="MSIUSEREALADMINDETECTION" Value="1" />

Opus Krokus 建议的解决方案对我不起作用。

【讨论】:

【参考方案3】:

您需要 2 个命令:

<Property Id="MSIUSEREALADMINDETECTION" Value="1" />     

<Condition Message="Installation requires Administrator privileges">
    <![CDATA[Privileged]]>
</Condition>

注意你必须用&lt;![CDATA[]]&gt;包围Privileged

【讨论】:

【参考方案4】:

这对我有用,因为我为在 Windows 7(及更高版本)上安装而创建的 MSI:

  <!-- Set per-machine installation as default.
  See See http://msdn.microsoft.com/en-us/library/dd408007.aspx for an explanation of ALLUSERS=2 and MSIINSTALLPERUSER="".
  -->
  <Property Id="ALLUSERS" Value="2" />
  <!-- Needs to be empty value (and empty value must be commented out to get rid of error message when compiling):
  <Property Id="MSIINSTALLPERUSER" Value="" /> 
  -->

如上述 XML-comment 中所述,详情请参阅http://msdn.microsoft.com/en-us/library/dd408007.aspx。

【讨论】:

以上是关于如何让 WiX 安装程序请求管理权限?的主要内容,如果未能解决你的问题,请参考以下文章

wix 自定义操作,管理员组

Wix:使用permissionEx设置安装文件夹中文件夹的权限

恢复到以前版本的 wix 安装程序

WiX - 将 InstallScope 从 perUser 切换到 perMachine

如何创建将同时安装到 IIS6 和 IIS7 的 WIX 安装程序

在 WIX 迁移中管理用户配置