【发布时间】:2016-03-01 01:26:25
【问题描述】:
我正在通过 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 本身应该能够以管理员身份运行命令或至少向用户提示。
【问题讨论】:
-
您希望提升的 exe 能够访问谁的 HKCU?
-
HKCU 是在用户每次登录系统时创建的,并且始终适用于当前登录并使用系统的用户。
-
是的,但是带有 Execute="deferred" 和 Impersonate="no" 的自定义操作可能不会以登录用户身份运行。它可能以 SYSTEM 帐户运行。
-
除了使用 Execute="deferred" 和 Impersonate="no" 之外,没有其他选项可以在 msi 中运行 exe。还作为 s 系统帐户运行应该可以访问当前用户的注册表值吗?此外,我通过不读取 Shell 文件夹中的注册表值而不是调用 C++ 的 Shell 函数来获取用户字体目录的路径来解决了这个问题
-
如果这是唯一的方法,那些属性就没有必要了;也许您的 EXE 上有一个不正确的清单。无论如何,虽然您已经朝着正确的方向迈出了一步,但仍不清楚自定义操作的作用,我怀疑它应该使用本机 Windows Installer 功能来实现。
标签: wix custom-action