2014-04-04 38 views
5

Mam więc usługę Windows, która może mieć wiele instancji zainstalowanych na jednym serwerze. Instalator musi mieć możliwość aktualizacji pojedynczej instancji. Instalator używa transformacji instancji, ale nie jestem pewien, jak sprawić, by główne aktualizacje działały tak, jak bym chciał.WiX - Wykonanie ważnej aktualizacji na instalacji wielu instancji

Dla dużego uaktualnienia do pracy, mój zrozumienia jest to, że muszę mieć zmiany kodu produktu, więc przypadki są określone w tej formie:

<Instance ProductCode="*" 
      UpgradeCode="{SOMEGUID}" 
      ProductName="Instance 1" 
      Id="Instance1"/> 

MSI może zostać uruchomiony, aby zainstalować nową instancję poprzez:

msiexec.exe /i "installer.msi" TRANSFORMS=:Instance1 MSINEWINSTANCE=1 

jednak po wielu poszukiwaniach jedyny sposób znalazłem uruchomić aktualizację na konkretnym przypadku jest to format:

msiexec.exe /i "installer.msi" /n {PRODUCTCODE} REINSTALL=ALL REINSTALLMODE=vamus 

Problem polega na tym, że kod produktu jest generowany automatycznie w przypadku większych aktualizacji, a ja nie wiem, co to jest, więc nie mogę przekazać argumentów polecenia.

Czy istnieje sposób, aby uruchomić aktualizację przy użyciu UpgradeCode Instance lub InstanceID zamiast lub ProductCode? Ponieważ obie te pozostaną statyczne. Alternatywnie, czy mogę uruchomić msi bez żadnych argumentów, wybrać istniejącą instancję (za pośrednictwem rejestru sprawdzania) w oknie dialogowym interfejsu użytkownika i ustawić odpowiednie właściwości, aby wymusić włączenie msi w trybie aktualizacji dla tej instancji?

+0

Możesz pomóc: http://sklyarenko.net/blog/2011/09/14/revisited-multiple-instance/ –

+0

Wydaje mi się, że po zainstalowaniu każdej instancji jest to produkt z kodem produktu .Jeśli robisz aktualizację, twój nowy produkt musi po prostu zrobić nudną, poważną aktualizację i wypełnić tabelę uaktualnień o elementy, które zastąpią poprzedni produkt, który powinien zastąpić. Nie chodzi o to, że wiem dużo o instancjach, ale czy wypróbowałeś konwencjonalne podejście do używania tabel aktualizacji, które powodują, że twoja nowa instancja aktualizuje każdą ze starych instancji. Czy mówisz, że nie możesz aktualizować każdego produktu osobno, ponieważ wszystkie one mają ten sam kod uaktualnienia? Ta sama wersja? – PhilDW

+0

Po prostu informujemy, że można uzyskać ** pełną listę ** z ** kodów produktu **, ** kodów aktualizacji ** i ** nazw produktów ** na danym komputerze za pomocą PowerShell: [** W jaki sposób Znajduję kod Upgrade dla zainstalowanego pliku MSI? **] (https://stackoverflow.com/questions/46637094/how-can-i-find-tgrade-code-for-an-installed-msi-file/46637095 # 46637095). –

Odpowiedz

1

Oto co zrobiłem do tej pory do obsługi 3 oddzielne instancje modernizacji:

<InstanceTransforms Property="Upgrade"> 
    <Instance Id="I01" ProductCode="*" ProductName="Product Instance 1" UpgradeCode="55a25a09-5979-438d-91dd-67755012a288"/> 
    <Instance Id="I02" ProductCode="*" ProductName="Product Instance 2" UpgradeCode="a27eb2e5-9aa8-4d09-b6c0-df717875c310"/> 
    <Instance Id="I03" ProductCode="*" ProductName="Product Instance 3" UpgradeCode="d705720d-3703-4b17-817e-bd51edd9abea"/> 
</InstanceTransforms> 

Chociaż moja Upgrade Nieruchomość jest stałym GUID. Dzięki temu mogę obsłużyć 3 przypadki z ich aktualizacji osobno wykorzystujących tę linię -Dla nowych instalacjach, dodać MSINEINSTANCE = 1:

msiexec/i MyProduct.msi MSINEWINSTANCE = 1 Transformacje: I01 = ""

+0

To mniej więcej dokładnie to, co zrobiłem. Nie mogę powiedzieć na pewno, czy zadziałałoby to w momencie otwarcia pytania, ale wsparcie dla wielu serwerów wielordzeniowych przez wix od tamtej pory znacznie się zmieniło i na pewno działa teraz. – AndyK

8

Całkiem na pewno potrzebny jest kod produktów za to od kodu uaktualniania identyfikuje rodzinę produktów, a nie jeden.

odpalić PowerShell i uruchomić to polecenie, aby uzyskać listę zainstalowanych produktów z kodem produktu:

Get-WmiObject -Class win32_product 

Oto inny sposób, aby uzyskać wyjście w formacie tabelarycznym(IdentifyingNumber to ProductCode):

Get-WmiObject Win32_Product | Format-Table IdentifyingNumber, Name, Version 

Kod produktu można również znaleźć w tabeli Property zestawienia M SI użyciu Orca (MSI SDK tool):

enter image description here

+0

Zobacz także: http://stackoverflow.com/a/24340339/129130 –

+0

Narzędzie Orca zrobiło to za mnie! – Antebios