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?

¿Fue útil?

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.

    Licenciado bajo: CC-BY-SA con atribución
    No afiliado a StackOverflow
    scroll top