UI序列中的Wix进度条

时间:2017-12-27 08:34:11

标签: wix windows-installer

我可以在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>

1 个答案:

答案 0 :(得分:1)

在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. 如果应用程序在安装后首次运行,您可以在不受自定义操作限制的情况下运行,可以在普通用户环境中运行,并且更容易重新运行,那么填充数据库或其他配置的操作通常最好。是稍后的问题或更多配置。
  5. 因此,如果您具有使用引导程序的先决条件,并且如果您要更改系统,则将执行顺序中的这些更改作为延迟自定义操作放在其中,如果安装失败,则可以报告进度并撤消(使用回滚自定义操作)取消。简短的回答是,您可以在UI序列中获得类似的进度条。