2014-05-21 8 views
9

Mam aplikację pakowaną z MSI, która jest tworzona w pakiecie WiX wraz z różnymi wymaganymi narzędziami innych firm. Wyłączyłem modyfikowanie i naprawę działań w MSI du do działania aplikacji, aby wymagało pełnego odinstalowania przed ponownym zainstalowaniem tej samej wersji.Jak zapobiec podwójnemu pakietowi WiX z tym samym kodem uaktualniającym/Wersja

Po uruchomieniu MSI osobno działa on tak, jak powinien: instalatora nie można uruchomić dwukrotnie. To samo dotyczy ponownego uruchomienia tego samego pakietu. Ale po prostu przez przebudowanie pakietu (przy użyciu tego samego UpgradeCode i Version), instalacja zamiast tego działa (znacznie szybciej tym razem), a ja kończy się zduplikowanym wpisem wśród zainstalowanych programów. Naprawdę chciałbym temu zapobiec i sprawić, by pakiet działał jako MSI.

Próbowałem z różnymi warunkami ustawionymi na pakiecie; NOT WixBundleInstalled, WixBundleInstalled != 1 itd. Ale nic z tego nie działa.

Dla porównania, oto zestawienie bundle:

<Bundle UpgradeCode="{FAF9CBDD-BE89-4B18-9921-FD5B426B5B0C}" IconSourceFile="$(var.SolutionDir)Resources\product.ico" 
      Name="Product 4.4" Version="4.4.0.0" Manufacturer="My Company" DisableModify="yes" Condition="NOT (WixBundleInstalled = 1)"> 
+1

Znam przypadek, w którym może się to zdarzyć podczas instalowania msi (nie pakietu): jeśli 2 msi mają ten sam kod aktualizacji, ale są zainstalowane w różnych kontekstach (jeden instaluje się na użytkownika, a drugi na maszynę), wtedy nie będzie aktualizacji, tzn. będziesz mieć 2 zduplikowane wpisy. – Brainless

+0

Dzięki. Oprócz naszego własnego MSI, istnieje jeden pobrany z zewnątrz (wstępnie zbudowany) MSI, który zawarliśmy w pakiecie. Próbowałem dodać 'ForcePerMachine =" yes "' do tej instrukcji 'MSIPackage', ale to nie pomogło. –

+0

to Twój identyfikator produktu = "*"? – ColacX

Odpowiedz

0

Jeśli dodać tag OptionalUpdateRegistration zyskasz wpis w rejestrze można użyć jako InstallCondition dla pakietu MSI

<OptionalUpdateRegistration ProductFamily="MyProductFamily" Name="MyAppBundle"/> 

<util:RegistrySearch Id="SearchForMyProduct" 
        Root="HKLM" 
        Key="SOFTWARE\WOW6432NODE\MyCompany\Updates\MyProductFamily\MyAppBundle" 
        Value="PackageVersion" 
        Result="exists" /> 

<MsiPackage Id="MyMsi" 
      InstallCondition=SearchForMyProduct 
      DisplayName="My Wonderful Product" 
      SourceFile="MyProduct.msi" 
      ForcePerMachine="yes"/> 

To zapobiegnie ponownemu instalowaniu "MyProduct" w nowej wersji pakietu. Nie uniemożliwi to instalacji pakietu po zainstalowaniu go z MSI. Aby to osiągnąć, możesz również mieć znacznik RegistrySearch dla klucza utworzonego przez twój MSI.

+0

To trochę poprawiło instalację pakietu, ale niestety samo wykonanie pakietu nadal powoduje zarejestrowanie innego (identycznego) pakietu. –