显示WIX引导程序安装操作的进度文本

时间:2016-04-18 03:27:31

标签: wix windows-installer bootstrapper burn wix3.8

我使用bootstrapper创建了一个WIX burn ui安装程序。它复制文件夹,复制一些注册表项并安装服务。没有自定义操作。有没有办法在这种情况下显示进度文本?它应该显示正在复制的项目,正在创建的注册表等。任何帮助将非常感谢。 (看到很多类似的问题,但所有问题都基于显示自定义操作的进度文本)

2 个答案:

答案 0 :(得分:2)

OnExecuteMsiMessage回调使BA可以访问Windows Installer正在执行的操作。这是WixStdBA处理它的方式:

virtual STDMETHODIMP_(int) OnExecuteMsiMessage(
    __in_z LPCWSTR wzPackageId,
    __in INSTALLMESSAGE mt,
    __in UINT uiFlags,
    __in_z LPCWSTR wzMessage,
    __in DWORD cData,
    __in_ecount_z_opt(cData) LPCWSTR* rgwzData,
    __in int nRecommendation
    )
{
#ifdef DEBUG
    BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "WIXSTDBA: OnExecuteMsiMessage() - package: %ls, message: %ls", wzPackageId, wzMessage);
#endif
    if (BOOTSTRAPPER_DISPLAY_FULL == m_command.display && (INSTALLMESSAGE_WARNING == mt || INSTALLMESSAGE_USER == mt))
    {
        int nResult = ::MessageBoxW(m_hWnd, wzMessage, m_pTheme->sczCaption, uiFlags);
        return nResult;
    }

    if (INSTALLMESSAGE_ACTIONSTART == mt)
    {
        ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_EXECUTE_PROGRESS_ACTIONDATA_TEXT, wzMessage);
    }

    return __super::OnExecuteMsiMessage(wzPackageId, mt, uiFlags, wzMessage, cData, rgwzData, nRecommendation);
}

答案 1 :(得分:0)

我知道这有点老问题。但最近我遇到了同样的事情,我想出来了。想与任何寻找答案的人分享:)。

您可以添加ExecuteMsiMessage事件处理程序来记录进度文本(例如:更新注册表,复制文件等)。

model.BootstrapperApplication.ExecuteMsiMessage += MessageHandler;

private void MessageHandler(object sender,ExecuteMsiMessageEventArgs e)
{
    // your message here
    ProgressStatusText = e.Message;
}