WIX CustomAction - 如何在安装/日志中获取更多信息

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

有人告诉我,WIX 中的 CustomAction 有一种方法可以在控制台日志中显示输出。我包含一个名为 XmlPreprocess.exe 的 .exe 来操作我的 web.config,基于名为 SettingsFileGenerator.xml 的文件中的参数,

我是这样跑步的: msiexec /i bin\Debug\TFBIC.RCT.WCFWebServicesWIXSetup.msi /L*V "C:\logs\WixInstall01.log"

这是我的 WIX 构建文件:

 <CustomAction Id="**SAMPLE_CONFIG**" BinaryKey="XMLPREPROCESS" ExeCommand="/i:&quot;[INSTALLLOCATION]web.config&quot; /x:&quot;[INSTALLLOCATION]SettingsFileGenerator.xml&quot; /e:QA /d:ServiceLocation=[SERVICELOCATION]" Execute="deferred" />
    <Binary Id="XMLPREPROCESS" SourceFile="../TFBIC.RCT.WCFWebServices/RequiredBins/XMLPreprocess.exe" />
    <InstallExecuteSequence>
        <Custom Action="SAMPLE_CONFIG" After="StartServices"><![CDATA[NOT Installed]]></Custom>
    </InstallExecuteSequence>

安装日志显示:

Action 15:22:27: StartServices. Starting services
Action start 15:22:27: StartServices.
MSI (s) (58:CC) [15:22:27:898]: Note: 1: 2205 2:  3: ServiceControl
MSI (s) (58:CC) [15:22:27:898]: Note: 1: 2228 2:  3: ServiceControl 4: SELECT `Name`,`Wait`,`Arguments`,`Event`, `Action` FROM `ServiceControl`, `Component` WHERE `Component_` = `Component` AND (`Action` = 0 OR `Action` = 1 OR `Action` = 2)
Action ended 15:22:27: StartServices. Return value 1.
MSI (s) (58:CC) [15:22:27:899]: Doing action: SAMPLE_CONFIG
Action 15:22:27: SAMPLE_CONFIG.
Action start 15:22:27: **SAMPLE_CONFIG**.
SAMPLE_CONFIG:
Action ended 15:22:27: **SAMPLE_CONFIG**. Return value 1.

这是我第一次尝试做WIX,所以请原谅我的无知。

谢谢

更新:

这是来自另一个论坛的引用 - 但他没有具体说明它是如何工作的,而且他似乎并不经常回来查看。

WiX 有一个自定义操作来捕获 控制台输出并粘贴它 直接进入详细的 MSI 日志,所以 这就是我用的。

参考:http://xmlpreprocess.codeplex.com/Thread/View.aspx?ThreadId=79454

这就是他所说的工具吗? http://wix.sourceforge.net/manual-wix2/qtexec.htm 我在尝试时收到此错误: 错误 LGHT0103:系统找不到文件“wixca.dll”。 我在整个磁盘上搜索了这个 .dll,但找不到它。

wix windows-installer
3个回答
9
投票

要在安装 msi 时启用所有可能的日志记录,请使用

/lvx* logfile.txt
选项。但是,即使这样也不会记录作为自定义操作调用的命令行应用程序的 STDOUT 和 STDERR 输出。

如果您自己编写了自定义操作,则可以向其中添加此类日志记录。例如,wix 附带的 DTF 库有一个可以调用的方便的

Session.Log
方法。有关更多信息,请参阅
c:\program files\windows installer xml v3\doc\dtf.chm
,主题“编写托管自定义操作”。

如果您还没有编写应用程序,您可以编写自定义操作来包装它。这样的包装器可以使用 .NET Process 类来调用可执行文件,读取 StandardErrorStandardOutput 流,并使用上面提到的

Session.Log
方法记录所有内容。

编辑:我不知道wix中有任何将控制台输出发送到日志的标准自定义操作。尝试 wix-users 邮件列表


1
投票

在 Wix 3.10 中,您可以使用安静执行自定义操作来运行可执行文件(静默,例如,没有弹出命令窗口),控制台输出最终将出现在 msi 日志中。

如前所述,您需要 WixUtilExtension 参考才能访问此功能。


0
投票

让我们有一个名为

MyCustomAction
的自定义操作,例如

<CustomAction Id="MyCustomAction" ... />

然后,在

UI
Package
节点中,您可以添加带有文本的
ProgressText
节点。

<!-- For WiX v4: -->
<UI>
  <ProgressText Action="MyCustomAction" Message="Now running my custom action! That's neat!"/>
</UI>

<!-- For WiX v3: -->
<UI>
  <ProgressText Action="MyCustomAction">Now running my custom action! That's neat!"</ProgressText>
</UI>

如果您要本地化安装程序,您可能需要将

Message
值替换为翻译键。

<!-- For WiX v4: -->
<UI>
  <ProgressText Action="MyCustomAction" Message="!(loc.MyCustomActionProgressDescription)"/>
</UI>

<!-- For WiX v3: -->
<UI>
  <ProgressText Action="MyCustomAction">!(loc.MyCustomActionProgressDescription)</ProgressText>
</UI>

支持此博客所有者(Wix v3):http://jonorossi.com/blog/2008/07/20/wix-progress-text-for-a-custom-action/

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