2012-11-09 9 views
17

Quando si installa un'applicazione che può utilizzare .NET 4.0 o 4.5, qual è la procedura migliore quando si installano i prerequisiti .NET framework? E come lo realizzi usando Burn in WiX?Come installare in modo intelligente .NET 4.x utilizzando WiX Burn

Queste sono le opzioni ei compromessi che io sono a conoscenza di:

Opzione 1: Installare .NET 4.0 (proprio quello che serve)

  • Vantaggi: Nessuno noto (ad eccezione di Windows XP, dove questa è l'unica scelta)

Opzione 2: Installare .NET 4.5 se .NET 4.5 non è presente

012.
  • Vantaggi: l'utente non dovrà installare .NET 4.5 in seguito per le future app . L'app non subirà modifiche alla versione .NET quando l'utente effettua l'aggiornamento a .NET 4.5. App ottiene immediatamente miglioramenti delle prestazioni di .NET 4.5.

Opzione 3: installare .NET 4.5 solo se né .NET 4.x è presente

  • Vantaggi: distribuzione Molto più veloce di opzione 2 se .NET 4.0 è già installato. In caso contrario, si applicano i vantaggi dell'opzione 2 .

Per quanto posso dire, la migliore pratica sarebbe l'opzione 2 se i miglioramenti delle prestazioni sono importanti e l'opzione 3 se la velocità di implementazione media è importante. Suona bene? Mi manca qualche vantaggio per l'opzione 1? Soprattutto, se l'opzione 3 ha senso, come la si implementa usando Burn durante l'installazione di .NET dal Web?

risposta

24

Di seguito è come rilevare .NET nel mio pacchetto. Nota l'uso di DetectConditions e InstallConditions. DetectCondition controllerà se il pacchetto specifico è installato o meno, mentre l'InstallCondition può essere usato per sovrascrivere DetectCondition per specificare quando il pacchetto deve essere installato. Ad esempio, su XP non è possibile installare .NET 4.5, quindi la mia InstallCondition impedisce l'installazione in questo caso.

<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> 

Poi, se si desidera installare uno dei pacchetti, basta fare riferimento a esso nella vostra catena:

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

Per quanto riguarda la tua domanda specifica, vorrei installare qualsiasi versione quadro dell'applicazione è stata testata contro . Se testato sia su .NET 4.0 che su .NET 4.5 suppongo sia un giudizio, tuttavia cercherò di semplificare il più possibile l'esperienza di installazione. Quindi, se .NET 4.0 fosse già installato e l'applicazione non richieda .NET 4.5, non la installerei.

Inoltre, c'è un svantaggio dell'opzione 2 se si utilizza un'applicazione personalizzata Bootstrapper gestita. Supponiamo di avere installato .NET 4.0 e il tuo bootstrapper gestito richiede .NET 4.0 (o versione successiva). Quando esegui il programma di installazione installerà .NET 4.5 che sostituisce .NET 4.0, forzando il riavvio del tuo programma di installazione a metà strada perché stava utilizzando .NET Framework nello stesso momento in cui veniva aggiornato.Ancora una volta, questo è solo un problema se si sta utilizzando il proprio bootstrapper gestito personalizzato.

+1

Nel mio caso, mi piacerebbe utilizzare l'installazione web tramite il gruppo di pacchetti ** NetFx45Web ** di WixNetfxExtension. Ho aggiornato la domanda di conseguenza. Esiste un equivalente a ** InstallCondition ** quando si lavora con un gruppo di pacchetti integrato? –

+0

Le condizioni di installazione si trovano sui pacchetti stessi (ExePackage, MsiPackage). Inoltre, l'attuale manuale WiX non elenca le proprietà di .NET 4.5 per sapere se è installato o meno. Penso che queste limitazioni siano il motivo per cui non ho usato NetfxExtension per il mio setup. IMO, se si desidera installare .NET 4.5 utilizzando NetfxExtension, probabilmente si aggiungerà semplicemente il gruppo di pacchetti NetFx45Web, quindi si inserirà una condizione nell'installazione solo su Vista o superiore. Quindi, se hai bisogno di un'installazione di XP, crea un progetto o una configurazione separati per generare un programma di installazione separato. – BryanJ

+0

Esiste un modo non troppo difficile per eseguire installazioni Web di .NET senza NetfxExtension? –

Problemi correlati