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?
W jaki sposób instalatory oparte na WIX mogą rejestrować COM dla 32- i 64-bitowych systemów Windows?
Odpowiedz
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.
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
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. –
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):
- utworzenia dwóch elementów, jeden instalacji tylko w 32-bitowym, a drugi będzie zainstalować jedynie na zasadzie System 64-bitowy.
- 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 ...
- 64-bitowy składnik musi mieć atrybut Win64 ustawiony na "tak".
- 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.):
- 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:
Dzięki! Dotarłem aż do ICE80, ale nie zdawałem sobie sprawy, że zadziała, jeśli zostanie zniesione :-) – Cameron
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