如何在我的 wix 项目中启用日志记录并设置 MsiLogFileLocation? 现在我正在使用命令行参数运行 install.msi:
msiexec /i install.msi /l*v InstallLog.log
我想记录我的工作,始终只运行 install.msi,不带任何参数。有什么办法可以做到这一点吗?
最佳答案
您可以告诉 WiX 使用详细日志记录,如下所示:
<Property Id="MsiLogging" Value="v" />
但您无法指定写入文件的位置 - 当 WiX 设置属性时,msiexec 已经确定了这一点。默认为 %TEMP%\MSI{随机字符}.LOG
。您可以为用户提供一个复选框来确定他们是否要打开该日志,如下所示(假设您使用内置的 InstallDir 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" />
这会将日志文件复制到游戏中尽可能晚的目录中,但至少会错过日志的一些尾部:
<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>
请注意,这不适用于 C:
驱动器根目录,因为这需要管理权限。如果您可以忽略更多日志,可以将 OnExit='success'
更改为 After='InstallFinalize'
并更改 Execute
CustomAction
上的 > 属性来commit
。这应该允许它以管理员身份运行。
请参阅此讨论以了解更多信息:http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/Setting-MsiLogFileLocation-property-td7374335.html
关于wix - 在 wix 安装程序中启用日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35774339/