2016-04-18 7 views
0

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

+0

Haben Sie bestätigt, dass dies die Benutzererfahrung verbessert? –

+0

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

Antwort

1

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); 
} 
+0

Ich werde dies versuchen und Sie wissen, Kumpel :) – mayooran

+0

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

0

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; 
}