Pregunta

Estoy teniendo ningún éxito en la modificación de un instalador MSI de Windows para ejecutar un archivo por lotes después de la salida principal se ha instalado. He buscado para esto y encontrado muchas sugerencias, pero nada que funcione.

Añadir una acción personalizada
Las acciones personalizadas sólo pueden ser archivos ejecutables. Un archivo por lotes no es ejecutable.

Crear un ejecutable de Windows Scripting Host que ejecuta el archivo por lotes
Muchas personas han tratado de hacer esto, incluyendo el SO , y nadie ha sido capaz de conseguir que esto funcione.

Uso WIX o InstallShield
No tengo el tiempo o la autoridad para cambiar la tecnología de instalación de la empresa.

Editar el .msi con Orca y añadir una propiedad personalizada, a continuación, una acción personalizada, a continuación, editar el InstallExecuteSequence, ...
He estado tratando durante horas y sólo han creado instaladores que arrojan un error del sistema cuando ellos.
Ejecutar
¿Fue útil?

Solución

Lo que ha dicho anteriormente es incorrecto:

  

Las acciones personalizadas sólo pueden ser ejecutables   archivos. Un archivo por lotes no es ejecutable.

Acciones personalizadas (incluso sin herramientas como InstallShield) pueden ser .EXE, VBScript, JScript, o DLL basada. Si se escribe un archivo DLL, puede escribir cualquier código que desea llamar a un archivo por lotes o hacer los cambios que desee en el sistema -. No hay límite

Actualizar : un ejemplo que trabajó para mí: (entrada en la tabla CustomAction)

Action Test
Type 34
Source SystemFolder
Target cmd.exe /c c:\test.bat
ExtendedType <blank>

Otros consejos

I fue capaz de resolver esto mediante la creación de un EXE que consiste esencialmente en:

System.Diagnostics.Process.Start(pathToBatchFile);

Agregar el EXE para el archivo MSI luego ejecutarlo como una acción personalizada.

Mientras que la respuesta sugerida por "William Leara" es un muy buen comienzo, he encontrado una solución mejor aquí vale la pena mencionar.

Otra de las ventajas de este método tiene es que usted puede poner su archivo por lotes en la aplicación de la carpeta de instalación en lugar de carpeta raíz C, pero que usan banderas especiales para aplazar la ejecución de después de FileCopy acción, también utilizar noImpersonate a tener mayores privilegios necesarios para ejecutar de archivos de programa

Algunas notas:

  1. Uso TARGETDIR en lugar de DIRINSTALACIÓN
  2. Asegúrese de citar los caminos.

Estos son mis dos acciones personalizadas. En mi caso, yo quiero forzar nativa procesador de comandos para fijar un par de entradas de registro por lo tanto yo no uso COMSPEC .

La primera acción (tipo 50) realiza mando en Fuente con argumentos de entrada de destino, porque el tipo es 50 + 1024 + 2048 para que se difiere la acción con noImpersonate bandera.

  • Acción: FinalAction
  • Tipo: 3122
  • Fuente: NCOM
  • Objetivo: / c "[TARGETDIR] Fixup.bat"

En segundo lugar la acción define NCOM propiedad inmediatamente:

  • Acción: FinalNativeSys
  • Tipo: 51
  • Fuente: NCOM
  • Objetivo: [WindowsFolder] System32 \ cmd.exe

A continuación, se debe añadir estas acciones a InstallExecuteSequence

  • Acción: FinalAction
  • Estado: no se instala
  • Secuencia: 5002

Y éste:

  • Acción: FinalNativeSys
  • Estado:
  • Secuencia: 5001

Tenga en cuenta que en mi caso podría modificar fácilmente las acciones para llamar a importación reg.exe Fixup.reg también. Por último se puede utilizar msitran en un post construcción para automatizar el procedimiento.

Hacer un archivo EXE que hace un archivo .bat temporal para cambiar al directorio lo que quiera y CALL otro archivo del palo que hace lo que necesita.

Dile a la acción personalizada para utilizar ese exe.

El primer argumento de un exe CPP es el camino a la propia exe. Esto se puede utilizar para orientarse, y que la información podría ser utilizada en la fabricación del .bat temporal

En mi caso, he añadido "Acciones personalizadas". Articles on carpeta "Instalar" elegir "Agregar acción personalizada"
Elige cmd.exe (c: \ windows \ system32 \ cmd.exe)
Luego, en propiedades de cmd.exe editar "argumentos" a
"/ Instalar / c C: \ MyApp.exe --exec-algunos-acción"

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