2012-11-09 14 views
17

Podczas instalowania aplikacji, która może korzystać z .NET 4.0 lub 4.5, jaka jest najlepsza praktyka podczas instalowania wymagań wstępnych platformy .NET? A jak zaimplementować go za pomocą Burn in WiX?Jak inteligentnie zainstalować .NET 4.x przy użyciu WiX Burn

Są to opcje i kompromisy, że jestem świadomy:

Opcja 1: Instalacja .NET 4.0 (tylko co trzeba)

  • Zalety: Nieznane (z wyjątkiem Windows XP, gdzie jest to jedyny wybór)

Opcja 2: Instalacja .NET 4.5 .NET 4.5, jeśli nie jest obecna

  • Zalety: Użytkownik nie będzie musiał instalować programu .NET 4.5 później dla przyszłych aplikacji . Aplikacja nie będzie miała zmiany w wersji .NET, gdy użytkownik później zaktualizuje ją do .NET 4.5. Aplikacja natychmiast uzyskuje poprawę wydajności o .NET 4.5.

Wariant 3: Instalacja .NET 4.5 tylko wtedy, ani .NET 4.x jest obecny

  • Zalety: Dużo szybsze wdrożenie niż wariant 2, jeśli .NET 4.0 jest już zainstalowany. Jeśli tak nie jest, obowiązują zalety opcji 2 .

O ile mi wiadomo, najlepszą praktyką będzie opcja 2, jeśli poprawa wydajności jest ważna, a opcja 3, jeśli ważna jest średnia szybkość wdrażania. Czy to brzmi dobrze? Czy brakuje mi jakiejś przewagi w opcji 1? Co najważniejsze, jeśli opcja 3 ma sens, jak zaimplementować ją przy użyciu opcji Burn podczas instalowania .NET z Internetu?

Odpowiedz

24

Poniżej znajduje się sposób wykrywania .NET w moim pakiecie. Zwróć uwagę na użycie DetectConditions i InstallDonditions. DetectCondition sprawdzi, czy konkretny pakiet jest zainstalowany, a InstallCondition może zastąpić DetectCondition, aby określić, kiedy pakiet powinien zostać zainstalowany. Na przykład na XP nie można zainstalować .NET 4.5, więc mój InstallCondition zapobiega instalacji w takim przypadku.

<util:RegistrySearch Root="HKLM" Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full" Value="Version" Variable="Netfx4FullVersion" /> 
<util:RegistrySearch Root="HKLM" Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full" Value="Version" Variable="Netfx4x64FullVersion" Win64="yes" /> 

<!-- .NET 4.5 only installed if Vista or higher AND it's not already installed--> 
<PackageGroup Id="Netfx45"> 
    <ExePackage Id="Netfx45" Cache="no" Compressed="yes" PerMachine="yes" Permanent="yes" Vital="yes" InstallCommand="/q" 
       SourceFile="C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\DotNetFX45Full\dotnetfx45_full_x86_x64.exe" 
       DetectCondition="(Netfx4FullVersion=&quot;4.5.50709&quot;) AND (NOT VersionNT64 OR (Netfx4x64FullVersion=&quot;4.5.50709&quot;))" 
       InstallCondition="(VersionNT >= v6.0 OR VersionNT64 >= v6.0) AND (NOT (Netfx4FullVersion=&quot;4.5.50709&quot; OR Netfx4x64FullVersion=&quot;4.5.50709&quot;))"/> 
</PackageGroup> 
<!-- .NET 4.0 only installed if XP AND it's not already installed --> 
<PackageGroup Id="Netfx4Full"> 
    <ExePackage Id="Netfx4Full" Cache="no" Compressed="yes" PerMachine="yes" Permanent="yes" Vital="yes" InstallCommand="/q" 
       SourceFile="C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\DotNetFX40\dotNetFx40_Full_x86_x64.exe" 
       DetectCondition="Netfx4FullVersion AND (NOT VersionNT64 OR Netfx4x64FullVersion)" 
       InstallCondition="(VersionNT &lt; v6.0 OR VersionNT64 &lt; v6.0) AND (NOT (Netfx4FullVersion OR Netfx4x64FullVersion))"/> 
</PackageGroup> 

Następnie, jeśli chcesz zainstalować jeden z pakietów, po prostu odwoływać w łańcuchu:

<Chain> 
    <PackageGroupRef Id='Netfx45'/> 
</Chain> 

w odniesieniu do konkretnej kwestii, chciałbym zainstalować niezależnie od wersji ramy aplikacja została przetestowana przed . Jeśli testowano zarówno w środowisku .NET 4.0, jak i .NET 4.5, przypuszczam, że jest to wyrok, ale staram się maksymalnie uprościć konfigurację. Jeśli więc .NET 4.0 był już zainstalowany, a aplikacja nie wymaga .NET 4.5, nie instalowałbym go.

W przypadku opcji niestandardowej aplikacji zarządzanej Bootstrapper występuje również wada opcji 2. Załóżmy, że masz zainstalowany .NET 4.0, a twój zarządzany bootstrapper wymaga .NET 4.0 (lub nowszego). Po uruchomieniu instalatora zostanie zainstalowany .NET 4.5, który zastępuje .NET 4.0, zmuszając instalator do ponownego uruchomienia w połowie, ponieważ korzystał z platformy .NET w tym samym czasie, w którym był aktualizowany.Ponownie, jest to tylko problem, jeśli używasz własnego, niestandardowego zarządzanego bootstrappera.

+1

W moim przypadku chciałbym użyć instalatora sieciowego za pośrednictwem grupy pakietów ** NetFx45Web ** firmy WixNetfxExtension. Odpowiednio zaktualizowałem Pytanie. Czy istnieje odpowiednik ** InstallCondition ** podczas pracy z wbudowaną grupą pakietów? –

+0

InstallConditions znajdują się na samych pakietach (ExePackage, MsiPackage). Ponadto aktualna instrukcja obsługi WiX nie zawiera żadnych właściwości .NET 4.5, aby stwierdzić, czy jest zainstalowana, czy nie. Myślę, że te ograniczenia powodują, że nie użyłem NetfxExtension dla mojej instalacji. IMO, jeśli chcesz zainstalować .NET 4.5 za pomocą narzędzia NetfxExtension, prawdopodobnie po prostu dodasz grupę pakietów NetFx45Web, a następnie ustaw warunek instalacji, aby działał tylko w systemie Vista lub nowszym. Następnie, jeśli potrzebujesz instalacji XP, utwórz oddzielny projekt lub konfigurację, aby wygenerować oddzielny instalator. – BryanJ

+0

Czy istnieje niezbyt trudny sposób na instalacje internetowe .NET bez NetfxExtension? –

Powiązane problemy