我已经构建了一个wix,但是我在最后一个部分失败了,我运行的应用程序允许用户与我刚安装的Windows服务进行通信。 安装回滚。
如果我不包含WixShellExec自定义操作,那么exe安装,我可以从安装文件夹运行应用程序没有问题。
我在Product.wxs文件中有这个:
<!--Used to start the Console when install complete-->
<Component Id="Cmp_ArduinoControllerConsole" Directory="dir_Console" Guid="83D1FD64-0DE5-461B-997D-641C394999F1">
<File Id="File_ArduinoControllerConsole" KeyPath="yes" Source="$(var.MyDir)\Console\RJB.ArduinoController.Console.exe" />
</Component>
<!--Set up the action to run the console at the end of the installation -->
<Property Id="WixShellExecTarget" Value="[#File_ArduinoControllerConsole]" />
<CustomAction Id="Run_File_ArduinoControllerConsole" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" />
<!--Sets when in the install sequence the Custom Action runs-->
<InstallExecuteSequence>
<Custom Action="Run_File_ArduinoControllerConsole"
Before="InstallFinalize" />
</InstallExecuteSequence>
我在安装日志中遇到错误:
MSI (s) (0C:34) [23:40:29:636]: Invoking remote custom action. DLL: C:\Windows\Installer\MSI6179.tmp, Entrypoint: WixShellExec
WixShellExec: Error 0x80070002: ShellExec failed with return code 2
WixShellExec: Error 0x80070002: failed to launch target
CustomAction Run_File_ArduinoControllerConsole returned actual error code 1603 (note this may not be 100% accurate if translation happened inside sandbox)
Action ended 23:40:29: Run_File_ArduinoControllerConsole. Return value 3.
有人能说出我做错了吗?
答案 0 :(得分:4)
解。
我无法获得Property中的值:
生成一个值,所以我将自定义操作更改为:
<CustomAction Id='Launch_ArduinoControllerConsole' FileKey='File_ArduinoControllerConsole' ExeCommand='' Return='asyncNoWait' />
并将其替换为:
<InstallExecuteSequence>
<Custom Action='Launch_ArduinoControllerConsole' After='InstallFinalize'>NOT Installed</Custom>
</InstallExecuteSequence>
安装完成后运行可执行文件。 CustomAction设置Return ='asyncNoWait'是正确的。
如果有人发现为什么Property中的值错了,我很想知道但是现在我有一个修复。
答案 1 :(得分:3)
要在安装文件后访问文件,自定义操作必须在延迟上下文中运行。在CustomAction元素上设置@ Execute =“deferred”。或者,使用How To: Run the Installed Application After Setup中描述的技术。
答案 2 :(得分:0)
对于它的价值,我必须设置立即行动所使用的Property的值:
<Property Id="MyProperty"> 1234 </Property>