Wix CAQuietExec写入登录错误

时间:2013-10-08 08:50:16

标签: wix windows-installer wix-extension

我有一个执行命令行工具的自定义操作:

    <CustomAction Id="QtExecUpdateDatabase_Cmd" Property="QtExecUpdateDatabase" Value="&quot;[#DATABASEUPDATER.EXE]&quot;" Execute="immediate" />
<CustomAction Id="QtExecUpdateDatabase" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="check" />
<InstallExecuteSequence>
  <Custom Action="QtExecUpdateDatabase_Cmd" After="CostFinalize">NOT REMOVE</Custom>
  <Custom Action="QtExecUpdateDatabase" After="InstallFiles" >NOT REMOVE</Custom>
</InstallExecuteSequence>

在某些情况下,它会失败。 msi日志如下所示:

SI (s) (98:98) [16:44:06:765]: Executing op: CacheSizeFlush(,)
MSI (s) (98:98) [16:44:06:765]: Executing op: InstallProtectedFiles(AllowUI=1)
MSI (s) (98:98) [16:44:06:765]: Executing op: ActionStart(Name=QtExecUpdateDatabase,,)
Action 16:44:06: QtExecUpdateDatabase. 
MSI (s) (98:98) [16:44:06:781]: Executing op: CustomActionSchedule(Action=QtExecUpdateDatabase,ActionType=1025,Source=BinaryData,Target=CAQuietExec,CustomActionData="D:\Documents and Settings\edugarcia\Configuración local\Datos de programa\Gamesa\HCAOffline\DatabaseUpdater.exe")
MSI (s) (98:B0) [16:44:06:796]: Invoking remote custom action. DLL: C:\WINDOWS\Installer\MSI2D.tmp, Entrypoint: CAQuietExec
MSI (s) (98:EC) [16:44:06:796]: Generating random cookie.
MSI (s) (98:EC) [16:44:06:812]: Created Custom Action Server with PID 3804 (0xEDC).
MSI (s) (98:90) [16:44:06:828]: Running as a service.
MSI (s) (98:90) [16:44:06:843]: Hello, I'm your 32bit Impersonated custom action server.
CAQuietExec:  Error 0x80131700: Command line returned an error.
CAQuietExec:  Error 0x80131700: CAQuietExec Failed
Action ended 16:44:07: InstallFinalize. Return value 3.

有没有办法记录命令行工具返回的错误消息?

此命令行工具有自己的日志,但是,失败后,将回滚所有安装过程,包括我的预先记录的日志。怎么能告诉wix不要删除命令行工具的日志?

2 个答案:

答案 0 :(得分:0)

Here is the solution

应用程序编写的任何文本(stdout和stderr)都写入日志,任何非零退出代码都被解释为失败,导致CAQuietExec也返回失败。

答案 1 :(得分:0)

我不明白你的断言是WiX正在回滚日志。 Windows Installer仅回滚它创建的内容。如果它调用EXE并且EXE写入日志,MSI就不会知道这个并且不会回滚它。

FWIW,进程外的EXE调用失败了MSI的目的。总是最好弄明白它的作用并以最好的方式做到这一点。