启用wix安装程序中的日志记录

Ant*_*n23 7 wix

如何在我的wix项目中启用日志记录并设置MsiLogFileLocation?现在我用命令行参数运行我的install.msi:

msiexec/i install.msi/l*v InstallLog.log

我想记录我的工作总是只运行install.msi没有任何参数.有没有办法做到这一点?

Dan*_*eld 14

您可以告诉WiX使用这样的详细日志记录:

<Property Id="MsiLogging" Value="v" />
Run Code Online (Sandbox Code Playgroud)

但你不能指定写文件的位置 - msiexec已经确定到WiX设置属性时.它默认为%TEMP%\MSI{random chars}.LOG.你可以为用户提供一个复选框,以确定他们是否要打开该日志,像这样(假设你使用内置的安装目录UI模板-它会是可能与他人很好,但是这是一个非常简单的例子) :

<Property Id="MsiLogging" Value="v" />

<UI>
  <UIRef Id="WixUI_InstallDir" />
  <Publish Dialog="ExitDialog"
  Control="Finish"
  Event="DoAction"
  Value="LaunchApplication">WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed</Publish>
</UI>
<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="View Installation Log" />

<WixVariable Id="WixUILicenseRtf" Value="license.rtf"/>

<Property Id="WixShellExecTarget" Value="[MsiLogFileLocation]" />
<CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" />
Run Code Online (Sandbox Code Playgroud)

这将在游戏中尽可能晚地将日志文件复制到目录中,但至少会遗漏日志的一些尾端:

<Property Id="MsiLogging" Value="v!" />
<CustomAction Id="CopyLog" Execute="immediate" 
              ExeCommand="cmd /c copy [MsiLogFileLocation] C:\temp\log.txt" 
              Directory="TARGETDIR" 
              Impersonate="no" 
              Return="asyncNoWait" />

<InstallExecuteSequence>
     <Custom Action="CopyLog" OnExit="success" />
</InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)

请注意,这不适用于C:驱动器根目录,因为这需要管理权限.如果你确定失踪甚至更多日志,你可以改变OnExit='success',以After='InstallFinalize'和更改Execute的属性CustomActioncommit.这应该允许它以管理员身份运行.

请参阅此讨论以获取更多信息:http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/Setting-MsiLogFileLocation-property-td7374335.html