如何让 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>
注意你必须用<![CDATA[
和]]>
包围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:使用permissionEx设置安装文件夹中文件夹的权限
WiX - 将 InstallScope 从 perUser 切换到 perMachine