我已经使用 WiX 几个星期了,但仍然发现很难获得有关事物如何工作的良好信息。其中之一就是日志记录。我要求安装程序将日志文件写入特定位置,而用户无需添加任何 /l 命令行参数。我看到有一个Log命令,但它的父级是 Bundle,用于创建捆绑包的根元素。我有一个简单的安装程序,所以我的情况可能不需要。这应该很容易,对吧?
1 . 这是最简单的解决方案(如果我是你,我会这样做) - 创建一个执行以下命令的批处理文件:
\n msiexec /i MyProduct.msi /L*V "%TEMP%\\MyProduct.log"\n
Run Code Online (Sandbox Code Playgroud)\n将批处理文件中的路径编辑为所需的自定义路径。
\n2 . 您可以使用MSILogging 属性在命令行之外设置日志记录。但此属性仅在 Windows Installer 4.0 中可用。
\n基本上,您需要在 .wxs 文件中添加一个新属性:
\n<Property Id="MsiLogging" Value="voicewarmupx!"/>\n
Run Code Online (Sandbox Code Playgroud)\nv
\xe2\x80\x93 详细输出o
\xe2\x80\x93 磁盘空间不足消息i
\xe2\x80\x93 状态消息c
\xe2\x80\x93 初始 UI 参数e
\xe2\x80\x93 所有错误消息w
\xe2\x80\x93 非致命警告a
\xe2\x80\x93 动作启动r
\xe2\x80\x93 特定操作记录m
\xe2\x80\x93 内存不足或致命退出信息u
\xe2\x80\x93 用户请求p
\xe2\x80\x93 终端属性!
\xe2\x80\x93 将每一行刷新到日志中x
\xe2\x80\x93 额外的调试信息这将确保在 %temp% 文件夹中创建日志文件,日志文件的名称类似于“MSI*.LOG”。可以从此属性和MsiLogFileLocation读取日志文件的完整路径。但 MsiLogFileLocation 属性是只读的,无法设置。
\n现在,这不能满足您在自定义位置创建日志文件的要求,因为我们无法设置日志文件位置。我们无法在 WIX 中设置日志文件位置的原因是,在 Windows 安装程序引擎实际开始执行 MSI 之前,我们需要告诉 MSIEXEC 将日志文件写入何处。
\n要解决此问题,您可以做的一件事是添加自定义操作并将日志文件从 %temp% 文件夹复制到所需的文件夹。它会是这样的:
\n<CustomAction Id="CopyLogFile" Execute="immediate" \n ExeCommand="cmd /c copy [MsiLogFileLocation] C:\\customlocation\\MyProduct.log" \n Directory="TARGETDIR" \n Impersonate="no" \n Return="asyncNoWait" />\n\n<InstallExecuteSequence>\n <Custom Action="CopyLogFile" OnExit="success" />\n</InstallExecuteSequence>\n
Run Code Online (Sandbox Code Playgroud)\n