Anton23
Anton23

Reputation: 2129

Enable logging in wix installer

How can I enable logging in my wix project and set MsiLogFileLocation? Now I am running my install.msi with command line arguments:

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

I want to log my work always just running install.msi without any arguments. Are there any way to do that?

Upvotes: 14

Views: 15525

Answers (1)

Dan Field
Dan Field

Reputation: 21641

You can tell WiX to use verbose logging like this:

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

but you can't specify where to write the file - msiexec has already determined that by the time WiX gets to set the property. It'll default to %TEMP%\MSI{random chars}.LOG. You could offer the user a checkbox to determine if they want to open that log, like this (assuming you're using the built in InstallDir UI template - it'd be possible with others as well, but this is a pretty simple example):

<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" />

This would copy the log file to a directory about as late as possible in the game, but would miss at least some of the tail end of the log:

<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>

Note that this won't work for the C: drive root, because that requires administrative privileges. If you're ok missing even more of the log, you could change OnExit='success' to After='InstallFinalize' and change the Execute attribute on the CustomAction to commit. That should allow it run as administrator.

See this discussion for a bit more: http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/Setting-MsiLogFileLocation-property-td7374335.html

Upvotes: 27

Related Questions