Pregunta

En un proyecto de instalación de los archivos ejecutables como ".exe, .dll, Js, .vbs" son aceptables pero no hay manera de ejecutar un archivo .bat en una acción personalizada.

La pregunta es cómo ejecutar los archivos *.bat durante la instalación?

¿Fue útil?

Solución

Bueno, después de mucho buscar y ensayo y error que han resuelto este. No estoy seguro de si se trata de la mejor manera, pero funciona.

Este es el escenario: Tengo una aplicación Me gustaría implementar a través de un proyecto de instalación de Visual Studio. Además de mis archivos de la aplicación, me gustaría crear un subdirectorio en el directorio de destino que contiene un archivo por lotes (.bat). Me gustaría que este archivo para ejecutar al final del proceso de instalación.

Esto es lo que hace:

  1. Crear un proyecto de instalación y configuración de la forma habitual, incluyendo el subdirectorio en el que se va a colocar el archivo por lotes (que sólo puede colocarlo en la carpeta de aplicación directa si no quiere que en un subdirectorio).
  2. En la vista "File System" (clic derecho en el proyecto en la solución Explorer de> Ver-> File System), añadir el archivo por lotes que desea ejecutar y cmd.exe (C : \ Windows \ System32 \ cmd.exe)
  3. Abra las "Acciones personalizadas" vista (clic derecho en el proyecto en la solución Explorer de> Ver-> Acciones personalizadas)
  4. Haga clic en "confirmar" y seleccione "Agregar acción personalizada"
  5. busque y seleccione cmd.exe.
  6. Abra el panel de propiedades para la acción personalizada de nueva creación.
  7. Eliminar / Commit de la propiedad Argumentos.
  8. Ingrese: /c "[TARGETDIR]subdirectoryname\batchfile.bat" en la propiedad Argumentos, donde subdirectoryname debe sustituirse por el nombre de su subdirectorio (si se pone el archivo por lotes en un subdirectorio como lo hice ... si no lo hizo , el valor debe ser /c "[TARGETDIR]batchfile.bat") y batchfile.bat debe ser el nombre de archivo de su archivo por lotes.

Eso es todo. El archivo por lotes se ejecutará ahora, una vez se haya completado el resto del proceso de instalación.

Este es un ejemplo en aras de la claridad:

Mi archivo por lotes: blah.bat
Mi subdirectorio: midirectorio

El valor de los argumentos a favor de mi acción de orientación personalizada cmd.exe sería entonces

/c "[TARGETDIR]mydir\blah.bat"

Espero que ayude a alguien!

Otros consejos

  1. Comprobar este artículo (artículo está en desuso), a pesar de que es en VB.NET se aplica a C # también. La parte más importante es (traducido a C #) la creación de una nueva biblioteca de clases, y la adición de una nueva clase de instalación con el siguiente contenido: Como se dice en el artículo que a continuación, puede crear una nueva acción personalizada con una referencia a su proyecto recién creado <. / p>

    override void Commit(IDictionary savedState)
    {
         base.Commit(savedState);
         System.Diagnostics.Process.Start("myApp.bat","your bat arguments");
    }
    
  2. Ahora estamos añadiendo archivo por lotes para su proyecto de instalación. Crear un proyecto de instalación y configurar como lo haría normalmente, incluyendo el subdirectorio en el que se va a colocar el archivo por lotes (que sólo puede colocarlo en la carpeta de aplicación directa si no quiere que en un subdirectorio).

  3. En el "Sistema de archivos" vista (clic derecho en el proyecto en la solución Explorer de> Ver-> File System), añadir el archivo por lotes que desea ejecutar.

  4. Construir el proyecto de instalación.

Otra manera de llegar al mismo resultado se pone un archivo .vbs en acciones personalizadas que se ejecuta el corresponsal archivo .bat. El código siguiente es el "RunRegisterComponents.vbs" Me pusieron en carpeta de la aplicación de configuración. Por supuesto que puse [TARGETDIR] como .vbs de parámetros en Studio ventana de Visual propiedad.

dim WshShell
Set WshShell = CreateObject("WScript.Shell")

' Read the "CustomActionData" property holding the install directory.
dim programDir
programDir=  property("CustomActionData")

' Make the batch full file name and parameter
commandString = chr(34) & programDir & "RegisterComponents.bat" & chr(34) & " " & chr(34) &
programDir& chr(34)

' Set the current directory
WshShell.CurrentDirectory = programDir

' Run batch.
ret = WshShell.Run (commandString, 0, 0)

Esto es como me puse mis acciones personalizadas:

introducir descripción de la imagen aquí

Espero que esto puede ayudar!

Si usted está tratando de ejecutar un archivo por lotes que tienen rutas relativas durante el proceso de instalación, que se producirá un error con seguridad. Eso es debido a que el archivo por lotes se tendrá en cuenta el directorio donde el instalador se está ejecutando, y no donde se están instalando los archivos. Utilizar constructores instalador que copia archivos por lotes en el directorio temporal.

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