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

时间:2012-07-30 13:25:12

标签: wix wix3.5

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

3 个答案:

答案 0 :(得分:9)

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

另一种可能性是将自定义操作分解为较小的自定义操作,并使用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表中定义的模板。

答案 1 :(得分:1)

Chris已正确解释了如何从您的CA向ActionData发送邮件,但如果您使用的是InstallShield,请确保在SetupProgress对话框中创建标签并订阅{{1} } text event to it。简单地说,为标签创建ActionData事件是不够的,因为它只显示您在ActionText表中创建的CA描述。

答案 2 :(得分:0)

以上答案对我不起作用。状态永远不会更新。

在我的情况下,直接调用AddProgressInfo函数即可。

      Action<Session, string> updateStatusMessage = (session, msg) =>
      {
            session.Message(InstallMessage.ActionStart, new Record("callAddProgressInfo", msg, ""));
      };