作为连续交付pipe道的一部分,我想在给定的机器上安装msi。 msiexec plus psexec完成这个工作,但似乎msiexec只能login到一个文件,我需要它login到标准输出/标准错误。
现在,为了让输出回到我们的CI软件中,我不得不添加第二步来回显日志的内容,这似乎有点没有意义。
有没有人遇到过这个问题(并克服它?)
在此先感谢您的帮助。
标记
我再次检查,这里是一些更新的信息 :
可以抑制MSI GUI并设置由第三方实现的外部GUI 。 该外部GUI能够在执行安装时从msiexec.exe接收消息。 这主要是为了实现一个自定义的进度条 ,但似乎你也可以拦截大多数其他错误消息和状态消息: MsiSetExternalUI函数 。
有趣的参数是dwMessageFilter 。 例如,通过设置,您可以仅接收安装期间发生的错误消息 – 或者看起来如此。 我想这对大多数目的来说已经足够了。
INSTALLUI_HANDLER MsiSetExternalUI( _In_ INSTALLUI_HANDLER puiHandler, _In_ DWORD dwMessageFilter, _In_ LPVOID pvContext );
遗憾的是,目前我没有这方面的示例代码。 稍后我会testing这个,当我得到我的系统设置正确。 MsiEnableLog函数是一个相关的函数调用,将启用日志文件。 更新: 这是什么看起来像一个工作的SDK的例子 。
在命令行界面级别 ,你也可以设置日志logging来立即刷新其缓冲区到文件,通过添加! 参数:
msiexec.exe /I "IsWiX.msi" /QN /L*V! "C:\msilog.log"
这意味着日志文件被连续写入,所以如果msiexec.exe崩溃,则不会丢失日志缓冲区。 由于IO开销,成本是一个明显较慢的安装程序。
MsiExec只能login到一个文件,所以你必须在安装程序完成后不断地回应该文件的内容。
我宁愿将本地系统上的MSI日志文件永久caching在每个安装的公共位置,然后只注册整个安装程序的退出代码。 如果安装程序报告成功,日志文件是相当无趣的? 只是更多的“噪音”?
除此之外,还有几个软件交付系统将捕获MSI安装的日志信息并集中存储。 一个例子是SCCM(微软更名为Systems Management Server – SMS)。
为所有MSI文件设置日志logging,请参阅“全局用于机器上的所有设置”一节: http : //www.installsite.org/pages/en/msifaq/a/1022.htm