Ich habe ein WIX-Installationsprogramm mit Bootstrapper erstellt. Es kopiert einen Ordner, kopiert einige Registrierungseinträge und installiert einen Dienst. Es gibt keine benutzerdefinierten Aktionen. Gibt es eine Möglichkeit, den Fortschrittstext in einem solchen Szenario anzuzeigen? Es sollte angezeigt werden, welche Elemente kopiert werden, welche Registrierungen erstellt werden usw. Jede Hilfe wäre sehr willkommen. (Viele ähnliche Fragen, aber alle basieren auf der Anzeige von Fortschrittstext für benutzerdefinierte Aktionen.)Fortschrittstext für WIX-Bootstrapper-Installationsaktionen anzeigen
Antwort
Der Rückruf OnExecuteMsiMessage
gibt dem BA Zugriff auf das, was Windows Installer gerade ausführt. Hier ist, wie WixStdBA behandelt es:
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);
}
Ich werde dies versuchen und Sie wissen, Kumpel :) – mayooran
Wie zeigen diese Installer in diesen Tagen zeigen "Kopieren von somefile", "Registrierungsschlüssel" Art von Dingen? Weil die Nachrichten von ExecuteMsiMessage ziemlich technisch erscheinen. Gibt es Hacks, um Nachrichten für Nicht-Techniker zu zeigen? – mayooran
Ich weiß, das ist etwas alte Frage. Aber kürzlich bin ich auf dasselbe gestoßen und habe es herausgefunden. Dachte daran, es mit jedem zu teilen, der nach Antworten sucht :).
Sie können ExecuteMsiMessage Event-Handler hinzufügen, um die Fortschrittstexte zu protokollieren (zB: Registry aktualisieren, Dateien kopieren usw.).
model.BootstrapperApplication.ExecuteMsiMessage += MessageHandler;
private void MessageHandler(object sender,ExecuteMsiMessageEventArgs e)
{
// your message here
ProgressStatusText = e.Message;
}
Haben Sie bestätigt, dass dies die Benutzererfahrung verbessert? –
Ja, weil sie wissen möchten, was passiert, wenn der Fortschrittsbalken bei einem bestimmten Prozentsatz festsitzt. Es wird ihnen helfen, zu wissen, dass die Installation immer noch stattfindet, obwohl der Fortschrittsprozentsatz sich nicht bewegt. Um solche Szenarien anzugehen, wäre es großartig, die Dinge zu zeigen, die passieren – mayooran