precios - wix plantillas
Cómo instalar inteligentemente.NET 4.x usando WiX Burn (1)
Al instalar una aplicación que puede usar .NET 4.0 o 4.5, ¿cuál es la mejor práctica al instalar los requisitos previos .NET Framework? ¿Y cómo lo implementas usando Burn en WiX?
Estas son las opciones y las compensaciones que conozco:
Opción 1: Instale .NET 4.0 (justo lo que necesita)
- Ventajas: Ninguna conocida (excepto para Windows XP, donde esta es la única opción)
Opción 2: instalar .NET 4.5 si .NET 4.5 no está presente
- Ventajas: El usuario no tendrá que instalar .NET 4.5 más adelante para futuras aplicaciones. La aplicación no experimentará un cambio de versión de .NET cuando el usuario luego actualice a .NET 4.5. La aplicación obtiene inmediatamente mejoras en el rendimiento de .NET 4.5.
Opción 3: instalar .NET 4.5 solo si ninguno de los dos .NET 4.x está presente
- Ventajas: Implementación mucho más rápida que la opción 2 si .NET 4.0 ya está instalado. Si no es así, entonces se aplican las ventajas de la opción 2.
Por lo que sé, la mejor práctica sería la opción 2 si las mejoras de rendimiento son importantes y la opción 3 si la velocidad promedio de implementación es importante. ¿Esto suena bien? ¿Me estoy perdiendo alguna ventaja de la opción 1? Lo más importante es que si la opción 3 tiene sentido, ¿cómo la implementa usando Burn al instalar .NET desde la web?
A continuación se muestra cómo detecto .NET en mi paquete. Tenga en cuenta el uso de DetectConditions y InstallConditions. El DetectCondition verificará si el paquete específico está instalado o no, mientras que el InstallCondition se puede usar para reemplazar el DetectCondition para especificar cuándo se debe instalar el paquete. Por ejemplo, en XP no puede instalar .NET 4.5, por lo que mi InstallCondition evita la instalación en tal 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="4.5.50709") AND (NOT VersionNT64 OR (Netfx4x64FullVersion="4.5.50709"))"
InstallCondition="(VersionNT >= v6.0 OR VersionNT64 >= v6.0) AND (NOT (Netfx4FullVersion="4.5.50709" OR Netfx4x64FullVersion="4.5.50709"))"/>
</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 < v6.0 OR VersionNT64 < v6.0) AND (NOT (Netfx4FullVersion OR Netfx4x64FullVersion))"/>
</PackageGroup>
Luego, si desea instalar uno de los paquetes, simplemente consúltelo en su cadena:
<Chain>
<PackageGroupRef Id=''Netfx45''/>
</Chain>
Con respecto a su pregunta específica, instalaría cualquier versión de framework con la que se probó la aplicación. Si se probara con .NET 4.0 y .NET 4.5, supongo que es una llamada de juicio, sin embargo, trataría de simplificar la experiencia de configuración tanto como sea posible. Entonces, si .NET 4.0 ya estaba instalado y la aplicación no requiere .NET 4.5, no lo instalaría.
Además, hay una desventaja en la Opción 2 si está utilizando una aplicación Managed Bootstrapper personalizada. Digamos que tiene .NET 4.0 instalado y su gestor de arranque administrado requiere .NET 4.0 (o superior). Cuando ejecute el instalador, instalará .NET 4.5 que reemplaza a .NET 4.0, forzando a su instalador a reiniciarse a mitad de camino porque estaba utilizando .NET framework al mismo tiempo que se estaba actualizando. De nuevo, esto solo es un problema si está utilizando su propio gestor de arranque personalizado.