2011-05-31 5 views
5

Mam długiego instalatora, który używa RegistryValue do konfiguracji serwera .Net COM. Instalator jest 32-bitowy. Chciałbym mieć ustawienia rejestru również dla 64-bitowych systemów operacyjnych. Moje badania pokazują, że w tym celu potrzebuję osobnego 64-bitowego instalatora. Dobra, jak mogę mieć bootstrappera, który wykrywa system operacyjny i wywołuje poprawne 32 lub 64-bitowe .msi?W jaki sposób instalatory oparte na WIX mogą rejestrować COM dla 32- i 64-bitowych systemów Windows?

+0

zostały również obserwuje się techniką wymienioną gdzie zarówno 32 jak i 64 wersje dll zależność są zawarte w th zużywanie zespołu. Zanim zespół wykona wywołanie PInvoke, sprawdza, czy biblioteka jest obecna. Jeśli nie, wyodrębnia odpowiednią dołączoną bibliotekę dll. Wydaje się to szalone, ale dla moich celów będzie idealnie działać. W przypadku przyszłych wydań mogę wypróbować tę trasę. – KevM

Odpowiedz

4

Musisz sam napisać bootstrapper.

WiX nie obsługuje mieszanych pakietów 32/64 bitowych, ponieważ Instalator Windows ich nie obsługuje. Jednak niektóre komercyjne narzędzia używają niestandardowego programu ładującego i 2 plików MSI do obsługi mieszanego instalatora.

+0

Nie chciałem zaakceptować tej odpowiedzi, ale zajrzałem do Burn w Wix 3.6, ale wygląda na to, że nie zezwalam na interfejs użytkownika wbudowanych MSI. Dla moich celów w tej chwili, który nie działa. Tak więc, niestety, będę musiał stworzyć własnego Bootstrappera. Spójrz na Burn, aby sprawdzić, czy jest on odpowiedni dla Ciebie. – KevM

+1

WiX obsługuje paczki 32/64 bitowe: http://jpassing.com/2009/10/09/mixing-32-and-64-bit-components-in-a-single-msi/ Check @Thomas Schlaefer reply. –

10

Miałem ten sam problem z niestandardowym rozszerzeniem nakładki powłoki systemu Windows, które musi zapewniać 32-bitową bibliotekę dll dla 32-bitowych systemów Windows i 64-bitową bibliotekę dll dla 64-bitowego systemu Windows. Mój 32-bitowy plik msi zapisałby wpisy rejestru tylko w węźle WoW6432 w systemie 64-bitowym, więc rozszerzenie powłoki nie działało.

roztworu (testowane wix-3.5.2519.0 Win7 x86 lub x64):

  1. utworzenia dwóch elementów, jeden instalacji tylko w 32-bitowym, a drugi będzie zainstalować jedynie na zasadzie System 64-bitowy.
  2. Użyj elementu "Condition" wewnątrz każdego komponentu, aby sprawdzić zgodność systemu operacyjnego. Użyłem Msix64, może również działać z VersionNT64 ...
  3. 64-bitowy składnik musi mieć atrybut Win64 ustawiony na "tak".
  4. Niestety, to nie zadziała poprawnie po wyjęciu z pudełka, ponieważ light.exe zgłasza błąd (błąd LGHT0204: ICE80: ten pakiet zawiera komponent 64-bitowy, ale właściwość Podsumowanie szablonu nie zawiera Intel64 ani x64.):
  5. rozwiązaniem jest uruchomienie pliku light.exe z wyłączonym sprawdzaniem ICE80 (użyj parametru -sice: ICE80). Teraz plik msi zostanie wygenerowany i może być używany na obu platformach.

przykład:

<Component Id="shellext_32.dll" DiskId="1" Guid="YOUR-GUID1"> 
    <!-- this will be installed only on a 32-bit System--> 
    <Condition><![CDATA[NOT Msix64]]></Condition> 
    <!-- copy 32-bit Dll file...--> 
    <File Id="blah blah... /> 

    <RegistryKey Id="MyShellIconOverlay" Root="HKLM"Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers\MyIconOverlay" Action="createAndRemoveOnUninstall"> 
     <RegistryValue Type="string" Value="{GUID...}" /> 
    </RegistryKey> 
</Component> 

<Component Id="shellext_64.dll" DiskId="1" Guid="YOUR-GUID2" Win64="yes"> 
    <!-- this will be installed only on a 64-bit System--> 
    <Condition><![CDATA[Msix64]]></Condition> 
    <!-- copy 64-bit Dll file...--> 
    <File Id="blah blah... /> 

    <!-- the following Registry Key will NOT be created inside the WoW6432 
    <RegistryKey Id="MyShellIconOverlay64" Root="HKLM" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers\MyIconOverlay64" Action="createAndRemoveOnUninstall"> 
     <RegistryValue Type="string" Value="{GUID...}" /> 
    </RegistryKey> 
</Component> 

Odniesienia:

+0

Dzięki! Dotarłem aż do ICE80, ale nie zdawałem sobie sprawy, że zadziała, jeśli zostanie zniesione :-) – Cameron

Powiązane problemy