Я создал установщик wix для запуска ui с помощью загрузчика. Он копирует папку, копирует некоторые записи в реестре и устанавливает службу. Обычных действий нет. Есть ли способ показать текст прогресса в таком сценарии? Он должен отображать, какие элементы копируются, какие реестры создаются и т. Д. Любая помощь будет высоко оценена. (Выделите много похожих вопросов, но все они основаны на отображении текста прогресса для пользовательских действий)Отображение текста прогресса для действий установки загрузочного буфера WIX
ответ
Обратный вызов OnExecuteMsiMessage
дает доступ BA к тому, что делает установщик Windows. Вот как это делается 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);
}
Я попробую это и дам вам знать mate :) – mayooran
Как эти установщики, которые мы находим в эти дни, показывают «копирование какого-то файла», «ключи для регистрации»? Потому что сообщения из ExecuteMsiMessage кажутся довольно техничными. Есть ли какие-либо хаки, чтобы показывать сообщения для нетехнических людей? – mayooran
Я знаю, что это старый вопрос. Но недавно я наткнулся на одно и то же, и я понял это. Мысль делиться ею со всеми, кто ищет ответы :).
Вы можете добавить обработчик событий ExecuteMsiMessage для регистрации текстов прогресса (например: обновление реестра, копирование файлов и т. Д.).
model.BootstrapperApplication.ExecuteMsiMessage += MessageHandler;
private void MessageHandler(object sender,ExecuteMsiMessageEventArgs e)
{
// your message here
ProgressStatusText = e.Message;
}
Вы подтвердили, что это улучшает опыт ваших пользователей? –
Да, потому что они хотели бы знать, что происходит, если индикатор прогресса застрял в определенном проценте. Это поможет им узнать, что установка все еще происходит, хотя процент прогресса не движется. Чтобы рассмотреть такие сценарии, было бы здорово показать, что происходит. – mayooran