WiX:在CustomAction期间动态更改状态文本

问题描述:

我在wix安装程序中有一个相当长的CustomAction,并且我希望能够在操作运行时更改'Status:...'文本,以查看是否存在进展和更新其内部状况。 我知道如何设置自定义动作的进度文本 - 但我想要的是在自定义动作运行期间动态更改进度文本。WiX:在CustomAction期间动态更改状态文本

延迟自定义操作可以调用MsiProcessMessage函数。然后,您可以使用INSTALLMESSAGE_ACTIONSTART,INSTALLMESSAGE_ACTIONDATA和INSTALLMESSAGE_PROGRESS将消息发布到用户界面。

另一种可能性是将自定义操作分解为更小的自定义操作,并使用ProgressText(ActionText表)来描述安装的不同阶段。 (让每个CA都有一个单一的责任。)

有时,当CA做了太多工作时,很难正确计划回滚。

Obtaining Context Information for Deferred Execution Custom Actions

MsiProcessMessage function

使用C#/ DTF它看起来是这样的:

using (Record record = new Record(0)) 
    { 
     record.SetString(0, "foo"); 
     session.Message(InstallMessage.ActionData, record); 
    } 

using语句处置记录以释放潜在的MSI处理。记录中的字段数量以及设置数据的方式将取决于ActionText表中定义的模板。

+0

谢谢。我相信这正是我所期待的。我的自定义操作是用C#编写的,你可能对DTF有解释吗? – 2012-07-30 15:52:10

+0

DTF doco中的所有类和成员都引用了基础MSI API对应部分,您可以使用帮助文件中的搜索选项卡找到它们。我会更新我的答案以提供样本。 (你没有提到你在编程CA.) – 2012-07-30 16:17:54

+0

谢谢。奇迹般有效 :) – 2012-07-31 05:47:54

克里斯已经正确地解释了如何将信息从CA发送到ActionData,但如果您使用InstallShield,请确保您创建的SetupProgress对话框标签和认购ActionData文本事件给它。简单地说,为标签创建ActionText事件是不够的,因为它仅显示您在ActionText表中创建的CA描述。