Bootstrapper: Cómo compilar la aplicación y el requisito previo en el paquete .msi sola?
-
05-09-2019 - |
Pregunta
Estoy creando un paquete .msi de la aplicación que tiene un requisito previo para la instalación. Estoy utilizando el Visual Studio 2005 Programa previo para esta tarea. Con este fin, hice lo siguiente: Situado en la carpeta C: \ Archivos de programa \ Microsoft Visual Studio 8 \ SDK \ v2.0 \ Bootstrapper \ Packages \ y ha creado una carpeta para mi condición (hecho misma estructura que 'dotnetfx'); creado el 'product.xml' y 'package.xml' y los colocó de manera apropiada. Seguí los archivos XML muy simple en lo que va a probar la instalación:
product.xml
<?xml version="1.0" encoding="utf-8"?>
<Product ProductCode="MyPrereq" xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper">
<PackageFiles CopyAllPackageFiles="false">
<PackageFile Name="MyPrereq.exe" />
</PackageFiles>
<InstallChecks>
</InstallChecks>
<Commands Reboot="None">
<Command PackageFile="MyPrereq.exe" EstimatedInstallSeconds="90">
<InstallConditions>
</InstallConditions>
<ExitCodes>
<ExitCode Value="0" Result="Success"/>
<DefaultExitCode Result="Fail" String="GeneralFailure" FormatMessageFromSystem="true" />
</ExitCodes>
</Command>
</Commands>
</Product>
package.xml
<?xml version="1.0" encoding="utf-8"?>
<Package Name="MyPrereq" Culture="Culture" xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper">
<Strings>
<String Name="Culture">en</String>
<String Name="DisplayName">MyPrereq</String>
<String Name="GeneralFailure">A fatal error occurred. The installation failed.</String>
</Strings>
</Package>
Ahora puedo añadir el requisito de la lista y construir mi proyecto de instalación.
El problema:
La salida de construcción es el 'setup.exe', el paquete 'MyApp.msi', además de la subcarpeta denominada 'MyPrereq' que contiene 'MyPrereq.exe'.
Me gustaría que la acumulación de crear un 'setup.exe' y un solo 'MyApp.msi', que contendría el 'MyPrereq' en el interior, sin archivos / directorios adicionales.
Yo sé que el marco .NET es otro prerrequisito para mi aplicación, y se incluye en el mismo .msi, por lo que debería ser posible de alguna manera.
¿Cómo puedo lograr esto?
Solución
Se puede crear un instalador autoextraíble con herramientas como IExpress (que viene con Windows) que contiene todos los archivos en un único archivo ejecutable (ver esto lo que la publicación ).
No se puede tener un archivo MSI de instalar sus propios requisitos previos. En primer lugar, porque el propio instalador de Windows es un requisito previo (y debe ser instalado por un exe no MSI) y segundo porque las instalaciones de Windows Installer son transaccionales y no son compatibles con la ejecución encadenado de archivos MSI. Esto significa básicamente que una instalación de MSI no se puede iniciar otra instalación MSI. Como consecuencia, cualquier pre-requisitos deben ser instalados por un programa previo por separado (por cierto, la instalación ya no es transaccional - los pre-requisitos no conseguirá desinstalado si la instalación no MSI).
Parece que hay un básico malentendidos sobre el mecanismo bootstrapper sin embargo. El programa previo sólo puede actualmente ser generado por Visual Studio o MSBuild. Que yo sepa que no es posible con WiX. Buscan la tarea GenerateBootstrapper en MSBuild (ver este lo que la publicación).
Otros consejos
Me las arreglé para hacer eso con IExpress.
Tuvimos que usar un pequeño truco, sin embargo, que se describe aquí Creación de un programa previo para una aplicación VS Shell
Por desgracia, la tarea de MSBuild no facilita la opción para que el el uso de recursos de configuración instaladores de requisitos previos que se encuentran en el directorio de destino, por lo que debe manualmente actualizar el archivo de recursos apropiados para eliminar la ruta no modificable que busca condiciones previas para toda subdirectorio del mismo nombre.
Abre el programa Setup.exe en Visual Estudio de recursos editor de
Haga doble clic el recurso con nombre, SETUPCFG en el 41 carpeta
Busque el "Vs Shell \" cuerda y borrar las dos ocurrencias que aparecen
Guarde el archivo de recursos y el ejecutable Setup.exe será actualizado automáticamente
Ejecutar IExpress Crear un nuevo paquete siguiendo el los pasos del asistente IExpress y asegurarse para incluir los archivos siguientes: La MyVSShellApplication.msi archivo La archivo Setup.exe programa previo La vs_shell_isolated.enu.exe archivo
El problema era que los requisitos previos programa previo pone en una subcarpeta, y IExpress no reconoce subcarpetas. Hay que tener cuidado durante la edición de 'setup.exe' también, no consiguió lo correcto en el primer intento.