2013-04-08 20 views
5

Używam Wix Burn do instalacji na potrzeby naszego projektu, użyłem ManagedBootstrapperApplicationHost, aby mieć niestandardowy interfejs użytkownika, śledziłem projekt dostępny z kodu źródłowego Wix do tworzenia mojego zarządzanej aplikacji WPF ..Instalacja Wix - Używanie Burn do zarządzania interfejsem użytkownika i wyświetlanie tekstu z takim samym postępem jak wbudowane okna dialogowe

teraz problem jest Progress (Message) pokazuje, że nie pasuje do wiadomości postępu mamy przy użyciu wbudowanego interfejsu - WixStandardBootstrapperApplication.RtfLicense

Zasadniczo używam następującego kodu ze źródła Wix

private void ExecuteMsiMessage(object sender, ExecuteMsiMessageEventArgs e) 
     { 
      lock (this) 
      { 
       this.Message = e.Message; 
       e.Result = this.root.Canceled ? Result.Cancel : Result.Ok; 
      } 
     } 

Jak mogę mieć taki sam wyświetlacz jak w normalnym oknie postęp .. muszę indywidualnie ustawić Wiadomość od innych metod, takich jak PlanPackage etc ..

Odpowiedz

6

wixstdba nie pokazuje postęp dane działanie wiadomości dzisiaj. Ktoś mówił o dodaniu funkcji na liście mailingowej wix-devs, ale to się jeszcze nie stało. Jest to po prostu kwestia dodania kodu takiego jak w zarządzanym przypadku do wixstdba (który jeszcze go nie ma).

Jeśli chcesz tylko wyświetlić nazwę instalowanego pakietu, tak jak robi to wixstdba, będziesz potrzebować wywołań zwrotnych Engine.OnCachePackageBegin() i Engine.ExecutePackageBegin(). Te wywołania zwrotne informują o tym, kiedy pakiet zostanie pobrany, a następnie zainstalowany. W ramach argumentów tych wywołań otrzymasz identyfikator pakietu.

Aby uzyskać przyjazną nazwę wyświetlaną, można odczytać numer BootstrapperApplicationData.xml, który jest automatycznie dołączany obok aplikacji Bootstrapper .dll. Dostępne są elementy WixPackageProperties, które dostarczają wiele informacji o pakietach w pakiecie, w tym DisplayName.

--- Przepraszamy, poniżej przedstawiono odpowiedź na pytanie, które nie zostało zadane. ---

Połączenie zwrotne Engine.ExecuteMsiMessage() jest wywoływane, gdy Instalator Windows wyświetla komunikat (np. Dane akcji lub żądanie monitowania użytkownika o wprowadzenie danych). Postęp jest zapewniany przez trzy różne wywołania zwrotne.

  1. Możesz uzyskać ogólne postępy poprzez wywołanie zwrotne Engine.Progress. Jest to bardzo gruboziarnisty postęp, który zasadniczo porusza się, gdy każdy pakiet jest buforowany i wykonywany.

  2. Możesz uzyskać ogólny i indywidualny postęp paczki za pośrednictwem Engine.CacheAcquireProgress. Postęp ten się rusza, gdy każdy pakiet jest pobierany/kopiowany i weryfikowany w celu umieszczenia go w pamięci podręcznej pakietów.

  3. Możesz uzyskać ogólny i indywidualny postęp paczki za pośrednictwem wywołania zwrotnego Engine.ExecuteProgress. Postęp ten się zmienia, gdy każdy pakiet jest instalowany/naprawiany/odinstalowywany.

Więc Engine.Progress pokazuje całkowity ogólny postęp i jest bardzo łatwy w obsłudze dla pojedynczego paska postępu, ale pasek postępu nie będzie poruszać się bardzo sprawnie. Możesz uzyskać bardziej płynny ogólny postęp, dodając Engine.CacheAcquireProgress do Engine.ExecuteProgress. Uwaga: dostaniesz pasek postępu, który wynosi 200.

Możesz zobaczyć, jak WixBA obsługuje to wszystko w pliku src\Setup\WixBA\ProgressViewModel.cs.

+0

Dzięki Rob! Postępuję zgodnie z ProgressViewModel.cs, ale problem, który napotykam jest podczas instalowania składników stron trzecich, takich jak SQL Server .. pokazuje mi "1: 2: 1" powyżej paska postępu. Sprawdziłem, co Wiadomość mi oddaje, ale wydaje mi się, że nie ma możliwości pokazania 'DisplayName =" SQL Server "' z '' pakietu. – Gaurav

+0

Ahh, zaktualizowałem moją odpowiedź, aby uwzględnić te informacje. –

+0

Dzięki Rob! Czy implementacja przy użyciu Engine.OnCachePackageBegin() i Engine.ExecutePackageBegin(), i to działało dobrze, jesteś wielka pomoc! – Gaurav