首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WiX:在CustomAction期间动态更改状态文本

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

Stack Overflow用户
提问于 2012-07-30 21:25:12
回答 3查看 4.9K关注 0票数 8

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-30 23:36:40

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

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

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

Obtaining Context Information for Deferred Execution Custom Actions

MsiProcessMessage function

使用C#/DTF,它看起来像这样:

代码语言:javascript
运行
复制
    using (Record record = new Record(0))
    {
        record.SetString(0, "foo");
        session.Message(InstallMessage.ActionData, record);
    }

using语句释放记录以释放基础MSI句柄。记录中字段的数量以及如何设置数据将取决于ActionText表中定义的模板。

票数 11
EN

Stack Overflow用户

发布于 2017-05-05 22:58:17

克里斯已经正确地解释了如何将消息从您的CA发送到ActionData,但是如果您使用的是InstallShield,请确保在SetupProgress对话框上创建标签并订阅ActionData text事件。简单地说,为标签创建ActionText事件是不够的,因为它只会显示您在ActionText表中创建的CA描述。

票数 1
EN

Stack Overflow用户

发布于 2019-09-05 09:36:55

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

在我的例子中,直接调用AddProgressInfo函数是可行的。

代码语言:javascript
运行
复制
      Action<Session, string> updateStatusMessage = (session, msg) =>
      {
            session.Message(InstallMessage.ActionStart, new Record("callAddProgressInfo", msg, ""));
      };
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11722541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档