UI序列中的Wix进度条

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UI序列中的Wix进度条相关的知识,希望对你有一定的参考价值。

我可以在UI序列中使用无模式进度条并使用UI序列中的自定义操作更新它吗?

这是我创建的页面,没有显示对话框,也没有调用自定义操作。是否有可能做到这一点?

    <Fragment>
        <UI>
            <!-- Progress Text To dispaly Progress Message -->
            <ProgressText Action="CA_1">Doing task 1</ProgressText>
            <ProgressText Action="CA_2">Doing task 2</ProgressText>
            <ProgressText Action="CA_3">Doing task 3</ProgressText>

            <Dialog Id="mysqlInstProgressDlg" Width="447" Height="362" Title="Mysql Progress Dialog" NoMinimize="no" Modeless="yes">

                <Control Id="InstPrsTxt" Type="Text" X="67" Y="116" Width="372" Height="12" Transparent="yes">
                    <Text>{FONT_DESC}</Text>
                    <Subscribe Event="ActionText" Attribute="Text"></Subscribe>
                </Control>
                <Control Id="InstPrgs" Type="ProgressBar" X="30" Y="136" Width="397" Height="17" ProgressBlocks="yes" Text="Progress done">
                    <Subscribe Event="SetProgress" Attribute="Progress" />
                </Control>
                <Control Id="DownloadBtn" Type="PushButton" X="292" Y="330" Width="66" Height="21" Default="yes">
                    <Text>{FONT_DESC}Download</Text>
                    <Publish Event="DoAction" Value="CA_1" Order="1"><![CDATA[IS_SUCCEED = "true"]]></Publish>
                    <Publish Event="DoAction" Value="CA_2" Order="2"><![CDATA[IS_SUCCEED = "true"]]></Publish>
                    <Publish Event="DoAction" Value="CA_3" Order="3"><![CDATA[IS_SUCCEED = "true"]]></Publish>
                    <Publish Event="EndDialog" Value="Return" Order="4"><![CDATA[IS_SUCCEED = "true"]]></Publish>

                    <Publish Event="NewDialog" Value="ErrorDlg" Order="5"><![CDATA[(NOT Installed) AND IS_SUCCEED <> "true"]]></Publish>
                </Control>
                <Control Id="CancelBtn" Type="PushButton" Height="21" Width="66" X="368" Y="330" Cancel="yes" Default="yes">
                    <Text>{FONT_DESC}Exit</Text>
                    <Publish Event="DoAction" Value="InstCancelConfirm_CA" Order="1"><![CDATA[1]]></Publish>
                    <Publish Event="NewDialog" Value="ErrorDlg" Order="2"><![CDATA[(NOT Installed) AND IS_INTERRUPTED = "true"]]></Publish>
                </Control>
            </Dialog>
        </UI>
    </Fragment>
</Wix>

UI序列:

    <InstallUISequence>
        <Show Dialog="InstWelcomeDlg2" Before="MysqlInstProgressDlg"><![CDATA[NOT Installed]]></Show>
        <Show Dialog="MysqlInstProgressDlg" Before="ExecuteAction"><![CDATA[NOT Installed]]></Show>
    </InstallUISequence>
答案

管理Windows Installer安装中的进度是在InstallExecuteSequence中完成的,您可以使用这种MsiProcessMessage()活动挂钩它:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa367525(v=vs.85).aspx

您发送INSTALLMESSAGE_PROGRESS消息的位置。

它以这种方式工作,因为在UI序列中通常不需要进度或长时间运行自定义操作:

  1. 在UI序列期间不应更改系统,因为安装可能会在以后失败或被取消,从而使系统发生更改。
  2. 静默安装不会调用UI序列。
  3. 应该使用引导程序安装先决条件(您的一个自定义操作似乎是安装SQL)。
  4. 填充数据库或其他配置的操作通常最好在应用程序首次运行安装后,您不受自定义操作的限制,可以在普通用户环境中运行,如果有问题或更容易重新运行稍后更多配置。

因此,如果您具有使用引导程序的先决条件,并且如果您要更改系统,则将这些更改作为延迟自定义操作放在执行顺序中,如果安装失败或取消,它们可以报告进度并撤消(使用回滚自定义操作)。简短的回答是,您可以在UI序列中获得类似的进度条。

以上是关于UI序列中的Wix进度条的主要内容,如果未能解决你的问题,请参考以下文章

Wix安装 - 使用Burn来管理UI并将相同的进度文本显示为内置对话框

活动到片段方法调用带有进度条的线程

Unity3D序列帧动画制作方法---实现加载进度条

进度条不隐藏是当数据在片段中的recyclerview中加载时

jQuery UI - 如何在加载时在页面顶部显示进度条

Wix XmlFile 元素执行得太早