如何在我的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的属性CustomAction来commit.这应该允许它以管理员身份运行.
请参阅此讨论以获取更多信息:http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/Setting-MsiLogFileLocation-property-td7374335.html