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