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

问题描述 投票:0回答:2

我正在 Wix 中通过 CustomAction 运行 .exe 文件。可执行文件正在运行,但不具有管理员权限。似乎我做的一切都是正确的,但不确定出了什么问题。这是我的自定义操作的示例

<CustomAction Id="RunExe" FileKey="Setup" ExeCommand="-switch" Execute="deferred" Return="check" Impersonate="no"/>

<InstallExecuteSequence>
<Custom Action="RunExe" Before="InstallFinalize">NOT Installed</Custom>  
</InstallExecuteSequence>

实际问题是通过 ExeCommand 执行的这个 .exe 无法访问注册表项(HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders)。

以管理员身份运行 msi 可以解决问题,但我需要一个解决方案,其中 WIX 本身应该能够以管理员身份运行命令或至少向用户提供提示。

wix custom-action
2个回答
0
投票

每台计算机安装中的延迟自定义操作通过系统帐户运行提升。目前尚不清楚访问 HKCU 密钥是什么意思,但使用系统帐户运行的可执行文件的 HKCU 密钥是系统帐户的 HKCU,而不是安装用户的 HKCU。如果您确切地说出您想要实现的目标,这将会有所帮助,因为您可能根本不需要代码。如果您使用 WiX/MSI 的注册表功能,安装将为安装用户更新 HKCU,因此这可能是根本不需要代码的情况。

还不清楚为什么以管理员身份运行 MSI 可以解决问题,因为该自定义操作已经在每台计算机安装中提升并提升了 InstallPrivileges。您的帖子中没有足够的信息作为您的安装上下文,但我的猜测是您可能会在没有提升 InstallPrivileges 的情况下进行每用户安装 - 这是一种 MSI 会在安装用户的帐户下运行 CA 但它们不会除非您按照您所说的操作来提升整个安装 - 以管理员身份运行 MSI。


0
投票

我也遇到过类似的问题。通过 InstallerScope="perMachine" 和 Impersonate="no" 解决。据我所知,对于 HKCU,有一个这样您可以直接访问密钥。这也是一个

<Property Id="MSIUSEREALADMINDETECTION" Value="1" />
,用于以完全管理员权限运行它。

© www.soinside.com 2019 - 2024. All rights reserved.