2012-07-31 18 views
5

Chcę dostosować mój instalator tak, aby wyświetlał niestandardowe okno dialogowe, gdy poprzednia wersja jest już zainstalowana: po powitalnym oknie dialogowym użytkownik powinien zobaczyć niestandardowe okno dialogowe z informacją, że poprzednia wersja została znaleziona i zostanie odinstalowana automatycznie.Wix: pokaż niestandardowe okno dialogowe, jeśli została znaleziona poprzednia wersja:

Ale z jakiegoś powodu właściwość ustawiona przez UpgradeVersion element zawsze null kiedy sprawdzam to w stanie w UI/Publish Dialog.

Oto niezbędne fragmenty kodu.

Product.wxs:

<Product Id="*" Version="$(var.Version)" UpgradeCode="$(var.ProductId)" 
     Language="1033" Name="$(var.ProductFullName)" Manufacturer="$(var.Manufacturer)"> 
    <Package Description="$(var.ProductDescription)" InstallerVersion="200" Compressed="yes" 
      Manufacturer="$(var.Manufacturer)" /> 

    <Property Id="PREVIOUSVERSIONSINSTALLED" Secure="yes" /> 
    <Upgrade Id="$(var.ProductId)"> 
    <UpgradeVersion Minimum="1.0.0.0" Maximum="$(var.Version)" 
        Property="PREVIOUSVERSIONSINSTALLED" 
        IncludeMinimum="yes" IncludeMaximum="no" /> 
    </Upgrade> 

    <InstallExecuteSequence> 
    <RemoveExistingProducts Before="InstallInitialize" /> 
    </InstallExecuteSequence> 
</Product> 

WixUI_Wizard.wxs:

<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="OldVersionDlg">PREVIOUSVERSIONSINSTALLED</Publish> 
<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="SetupTypeDlg">NOT Installed</Publish> 

przycisk Dalej nie działa. Sprawdziłem logi, że PREVIOUSVERSIONSINSTALLED jest ustawione po FindRelatedProducts. Jeśli używam go w warunkach w Product.wxs, wszystko jest w porządku. Ale w konfiguracji UI zawsze jest null.

Dzięki za pomoc.

Odpowiedz

2

Problem został spowodowany przez drugą linię w WixUI_Wizard.wxs. Z jakiegoś powodu WiX zawsze go używa. Tak więc, aby zaimplementować sprawdzanie wersji poprzedniej musimy wykluczyć PREVIOUSVERSIONSINSTALLED od drugiego warunku:

<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="OldVersionDlg">PREVIOUSVERSIONSINSTALLED</Publish> 
<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="SetupTypeDlg">NOT Installed AND NOT PREVIOUSVERSIONSINSTALLED</Publish> 
+0

Innym rozwiązaniem jest dodanie Publish/@ atrybut kolejności i ustawić pierwszy dialogowe Order = „1”, a drugie zamówić = "2". Prawdopodobnie zdarzyło się, że oba warunki zdarzenia publikowania zostały ocenione jako prawdziwe, a zatem instalator MSI wybrał pierwszą zdefiniowaną akcję publikowania. Poprzez dodanie zamówienia, informuje instalatora, która akcja ma zostać wykonana, jeśli oba zdarzenia publikowania mają prawdziwe warunki. Jedna uwaga, zdarzenie Zlecenie jest sprzeczne z intuicją, a jest to w rzeczywistości wyższa wartość Zamówienia, która jest preferowana, gdy oba warunki są prawdziwe. Możesz myśleć o tym bardziej jako o wadze, gdzie wygrywa wyższa waga. – pje

+0

@kirmir Gdzie mogę znaleźć plik WixUI_Wizard.wxs? IT powinien przyjść z instalacją WiX? Nie mogę tego znaleźć. Czy wiesz, jak to działa w wersji 3.10? – misshomme

+0

@micmica, ten plik został utworzony ręcznie i opisuje kolejność okien dialogowych. Użyłem wersji 3.5, kiedy zadano pytanie. Nie wiem o nowszej wersji, ale uważam, że nie powinno być żadnej różnicy. –