WiX 工具集默认日志文件位置

Tyr*_*erk 4 wix

我已经使用 WiX 几个星期了,但仍然发现很难获得有关事物如何工作的良好信息。其中之一就是日志记录。我要求安装程序将日志文件写入特定位置,而用户无需添加任何 /l 命令行参数。我看到有一个Log命令,但它的父级是 Bundle,用于创建捆绑包的根元素。我有一个简单的安装程序,所以我的情况可能不需要。这应该很容易,对吧?

Isa*_*110 8

1 . 这是最简单的解决方案(如果我是你,我会这样做) - 创建一个执行以下命令的批处理文件:

\n
   msiexec /i MyProduct.msi /L*V "%TEMP%\\MyProduct.log"\n
Run Code Online (Sandbox Code Playgroud)\n

将批处理文件中的路径编辑为所需的自定义路径。

\n

2 . 您可以使用MSILogging 属性在命令行之外设置日志记录。但此属性仅在 Windows Installer 4.0 中可用。

\n

基本上,您需要在 .wxs 文件中添加一个新属性:

\n
<Property Id="MsiLogging" Value="voicewarmupx!"/>\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  • v\xe2\x80\x93 详细输出
  • \n
  • o\xe2\x80\x93 磁盘空间不足消息
  • \n
  • i\xe2\x80\x93 状态消息
  • \n
  • c\xe2\x80\x93 初始 UI 参数
  • \n
  • e\xe2\x80\x93 所有错误消息
  • \n
  • w\xe2\x80\x93 非致命警告
  • \n
  • a\xe2\x80\x93 动作启动
  • \n
  • r\xe2\x80\x93 特定操作记录
  • \n
  • m\xe2\x80\x93 内存不足或致命退出信息
  • \n
  • u\xe2\x80\x93 用户请求
  • \n
  • p\xe2\x80\x93 终端属性
  • \n
  • !\xe2\x80\x93 将每一行刷新到日志中
  • \n
  • x\xe2\x80\x93 额外的调试信息
  • \n
\n

这将确保在 %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