【发布时间】:2017-07-25 15:59:06
【问题描述】:
我已经测试并运行了我的 PS1 脚本,他们运行 find 没有任何问题。因此,我尝试将它们集成到我的 WiX 安装程序中,但它们只是失败了,但愚蠢的安装程序从未给出任何有意义的信息来说明失败的原因......
我的 WiX wxs 文件中有这些:
<Property Id="InstallPlugin" Value=""Powershell.exe -File [#InstallPS1]"" />
<CustomAction Id="InstallPlugin" BinaryKey="WixCA" DllEntry="WixQuietExec" Execute="deferred" Return="ignore" Impersonate="no"/>
<Property Id="UninstallPlugin" Value=""Powershell.exe -File [#UninstallPS1]"" />
<CustomAction Id="UninstallPlugin" BinaryKey="WixCA" DllEntry="WixQuietExec" Execute="deferred" Return="ignore" Impersonate="no"/>
<InstallExecuteSequence>
<Custom Action="InstallPlugin" Before="InstallFinalize">NOT Installed</Custom>
<Custom Action="UninstallPlugin" After="InstallInitialize">(NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL")</Custom>
</InstallExecuteSequence>
我捕获了安装日志,我可以看到脚本被调用,然后失败并显示代码 1603,这并不意味着什么...
MSI (s) (F0:B0) [11:15:45:969]: Running as a service.
MSI (s) (F0:B0) [11:15:45:972]: Hello, I'm your 32bit Elevated Non-remapped custom action server.
WixQuietExec: Entering WixQuietExec in C:\Windows\Installer\MSI19C1.tmp, version 3.11.1701.0
WixQuietExec: "Powershell.exe -File C:\Program Files (x86)\Blah\install.ps1"
WixQuietExec: Error 0x80070002: Command failed to execute.
WixQuietExec: Error 0x80070002: QuietExec Failed
WixQuietExec: Error 0x80070002: Failed in ExecCommon method
CustomAction InstallPlugin returned actual error code 1603 but will be translated to success due to continue marking
我已经尝试了CustomAction 属性的各种组合,但这根本没有帮助。我很想使用Return="check",但这会阻止我的安装程序完成(我的安装程序在安装其他所有内容时都没有问题,没有错误,只是 ps1 脚本以某种方式阻塞)。
如果我导航到已安装的文件夹,例如 C:\Program Files (x86)\Blah 并手动运行我的脚本 .\install.ps1,它会按预期运行和运行。
任何 WiX 专家可以给我一些解决此问题的提示吗?谷歌搜索没有帮助......
PS:在install.ps1 中,它会启动一个提升的 powershell 会话(但这无关紧要,因为运行安装程序的人必须首先具有管理员权限),我不确定这是否会导致错误,如果是,那么我该如何解决我的脚本启动另一个脚本?
编辑:
我尝试运行的脚本是超级用户论坛中的posted here。本质上,我只是通过 Windows 注册表试图找到已安装的 Exchange Server 并获取内置 EMS 脚本并加载它。
【问题讨论】:
-
0x80070002 - 删除高字,留下 2 - 找不到文件。
-
@Bill_Stewart 如何确保执行顺序以便我的
Custom Action在安装后运行?它找不到该文件的唯一原因是它试图在安装程序将文件放在那里之前执行...我认为After="InstallFinalize"会确保文件位于其目标文件夹中。如果我查看实际路径,我的脚本就在那里,我可以复制粘贴命令并运行脚本。所以我不确定它怎么会是File Not Found。 -
我不熟悉 WiX,所以我不是回答您问题的合适人选。我只是说这就是错误的含义。
标签: powershell debugging wix windows-installer