2012-10-30 19 views
13

Potrzebuję wdrożyć instalację oprogramowania skierowaną zarówno do systemu Windows 64bit, jak i 32-bitowego. Mam dwie oddzielne bazy danych Instalatora Windows (utworzone za pomocą WiX) dla każdej platformy i używam dotNetInstaller, aby połączyć oba w jeden plik wykonywalny instalacji programu startowego.Jak wdrożyć 64-bitowy i 32-bitowy pakiet Instalatora Windows jako pojedynczą konfigurację?

Obecnie używam wersji 1.10 z dotNetInstaller i ustaw auto_close_if_installed=True, ponieważ chcę całkowicie ukryć bootstrapper od użytkownika. Mimo to, dotNetInstaller nalega na wyświetlanie paska postępu progów podczas mojego instalatora i nie zamyka się automatycznie. Użytkownik musi potwierdzić okno dialogowe z informacją, że aplikacja została pomyślnie zainstalowana. Ale prawdziwym deal-breaker jest to, że nie obsługuje Windows 8 (jeszcze).

Aktualizacja do nowszej wersji dotNetInstaller wydaje się przełamać auto_close_if_installed, więc jest jeszcze gorzej.

Moje pytanie brzmi: jaki jest obecny stan techniki wdrażania obu konfiguracji w jednym pliku wykonywalnym. Czy Wix Burn będzie opcją?

Wiem, że w idealnym świecie po prostu dostarczam moim klientom oddzielne instalatory dla każdej platformy. Ale zdają się być całkowicie nieświadomi takich subtelności, większość z nich nawet nie wie, z jakiej platformy korzystają.

+2

Używałem Burn za to w przeszłości, ale czułem się trochę jak przesada. Chcę zobaczyć, co myślą inni. – bricelam

+1

@Brice: Chodzi o to, że Burn też nie jest bardzo wiarygodny. Aktualizacja CTP programu Visual Studio 1 została wdrożona przy użyciu go i nie udało się zainstalować na moim komputerze z powodu nagrania: [Microsoft Connect 766849] (https://connect.microsoft.com/VisualStudio/feedback/details/766849/visual- studio-2012-update-1-ctp-3-crashes-during-installation) –

+4

Zalecam wypalenie w tym celu, z jednym pakietem oznaczonym InstallCondition = "NOT VersionNT64" i innym InstallCondition = "VersionNT64". Używając burn możesz utworzyć pojedynczy pakiet exe, a użytkownicy nie muszą uruchamiać poprawnego. – Neil

Odpowiedz

21

Zdecydowanie używałbym Burn w tym scenariuszu. Coś podobnego do następującego:

<Wix> 
    <Bundle...> 
    <BootstrapperApplicationRef Id='WixStandardBootstrapperApplication.HyperlinkLicense' /> 

    <Chain> 
     <MsiPackage InstallCondition='NOT VersionNT64' SourceFile='path\to\x86.msi' /> 
     <MsiPackage InstallCondition='VersionNT64' SourceFile='path\to\x64.msi' /> 
    </Chain> 
    </Bundle> 
</Wix> 

Jest to dokładnie jeden ze scenariuszy, który Burn został zaprojektowany do obsługi.

+2

Tak, dokładnie. Właśnie to robiłem. Przyjmuję twoją odpowiedź na przyszłe odniesienia do innych. –

+1

Z WiX 3.7 wygląda na to, że atrybut Warunek nie jest dozwolony w MsiPackage. Czy coś, co pojawia się w wersji 3.8, czy zostało ostatnio zmienione? –

+1

Typo w przykładzie. 'Condition' powinno być' InstallCondition'. –

0

Możesz to zrobić w jednym Wix za pośrednictwem warunków i funkcji.

<Feature Id='X86' Level='1'> 
    <ComponentRef Id='X86Feature1' /> 
    <Condition Level="1">NOT VersionNT64</Condition> 
</Feature> 
+3

Dlaczego upadły? – dvallejo

+0

Id nie głosował ani w górę ani w dół. Ale czy sądzisz, że przeczytałeś dokładnie to pytanie? Celem było połączenie dwóch MSI z zapięciem na buty, prawda? – harper