2012-07-30 13 views
5

Mam dość długą CustomAction w instalatorze wix i chcę mieć możliwość zmiany tekstu "Status: ..." podczas operacji, aby zobaczyć, że istnieje postęp i aktualizacja jego statusu wewnętrznego. Wiem, jak ustawić tekst wstępny niestandardowej akcji - ale chcę dynamicznie zmieniać tekst postępu podczas uruchamiania niestandardowej akcji.WiX: dynamiczna zmiana tekstu statusu podczas CustomAction

Odpowiedz

8

Odroczone akcje niestandardowe mogą wywoływać funkcję MsiProcessMessage. Następnie możesz użyć INSTALLMESSAGE_ACTIONSTART, INSTALLMESSAGE_ACTIONDATA i INSTALLMESSAGE_PROGRESS, aby opublikować wiadomości do interfejsu użytkownika.

Inną możliwością jest podzielenie niestandardowego działania na mniejsze akcje niestandardowe i użycie ProgressText (tabela ActionText) do opisania różnych faz instalacji. (Spraw, aby każdy urząd certyfikacji był objęty jedną odpowiedzialnością.)

Czasami, gdy urząd certyfikacji wykonuje zbyt dużo pracy, trudno jest prawidłowo zaplanować wycofanie.

Obtaining Context Information for Deferred Execution Custom Actions

MsiProcessMessage function

Korzystanie z C#/DTF wygląda mniej więcej tak:

using (Record record = new Record(0)) 
    { 
     record.SetString(0, "foo"); 
     session.Message(InstallMessage.ActionData, record); 
    } 

instrukcji using dysponuje rekord zwolnić bazowego MSI obsługuje. Liczba pól w rekordzie i sposób ustawiania danych będzie zależała od szablonu zdefiniowanego w tabeli ActionText.

+0

Dzięki. Wierzę, że właśnie tego szukałem. Moja niestandardowa akcja jest napisana w języku C#, czy może masz wyjaśnienie DTF? –

+0

Wszystkie klasy i członkowie w dokumencie DTF odwołują się do odpowiednich odpowiedników interfejsu MSI API i można je znaleźć za pomocą karty wyszukiwania w pliku pomocy. Zaktualizuję moją odpowiedź, by dostarczyć próbki. (Nie wspominałeś o tym, w czym programujesz CA). –

+0

Dzięki. Działa jak marzenie :) –

0

Chris poprawnie wyjaśnia, jak wysłać wiadomość do ActionData z CA, ale jeśli używasz InstallShield, upewnij się utworzyć etykietę w oknie dialogowym SetupProgress i subskrybować zdarzenie ActionData tekst do niego. Po prostu tworzenie zdarzenia ActionText dla etykiety nie jest wystarczające, ponieważ wyświetla tylko opis urzędu certyfikacji utworzony w tabeli interakcji.

Powiązane problemy