如何更改msi日志文件的默认目录?

问题描述 投票:0回答:2

我可以更改 msi 日志文件的默认目录 (%Temp%) 吗?

我想将日志目录移动到 ProgramData 文件夹。

谢谢

wix
2个回答
6
投票

这里的问题是,相关属性

MsiLogFileLocation
是只读的,即您没有机会更改日志文件的位置within Windows Installer 包。
不过还有一些选择:

  • 如果您使用
    /L
    -parameter
    运行 Windows Installer,则可以定义日志文件的位置,例如
    msiexec.exe /i MyPackage.msi /l*v "C:\path\to\log\logfile.log"
  • 确保例如客户将使用正确的参数调用它,您必须围绕 MSI 文件创建引导程序,例如使用
    burn
  • 还有一个更简单的解决方案(我自己使用的)是:让 Windows Installer 将整个安装过程记录到需要的地方。由于您始终可以使用
    MsiLogFileLocation
    -属性访问创建的日志文件的完整路径,只需将日志文件作为安装过程的最后一步复制到您想要的任何位置。这里唯一的缺点:有时最后几行会丢失,因为它是在安装完全完成之前复制的。

所以如果最后几行并不总是重要的(因为你进一步解析日志文件等),最后的解决方案可能是最简单的。
我在

InstallFinalize
之后安排了它(并使用了条件
NOT (REMOVE="ALL" AND NOT UPGRADINGPRODUCTCODE)
,顺便说一句,否则它会覆盖或复制太多或......(不记得))。


0
投票

使用@taffit 上面所说的,这就是我们最终得到的:

<Property Id="MsiLogging" Value="ewiac!" />

<CustomAction Id="CopyLog" Execute="immediate"
          ExeCommand="cmd /c echo F|xcopy /y [MsiLogFileLocation] C:\ProgramData\scrpt\logs\scrpt-install.log &amp;&amp; del [MsiLogFileLocation]" 
          Directory="TARGETDIR" 
          Impersonate="yes" 
          Return="asyncNoWait" />
<InstallExecuteSequence>
  <Custom Action="CopyLog" After="InstallFinalize">NOT (REMOVE="ALL")</Custom>
</InstallExecuteSequence>

使用 xcopy 是因为日志文件夹可能不存在并且复制不会创建它。

'echo F|'当它询问目标是文件还是目录时,将 F 通过管道传递给命令。 && 表示如果第一个有效则执行以下命令

© www.soinside.com 2019 - 2024. All rights reserved.