2010-07-16 23 views
13

Tengo un archivo por lotes que necesito ejecutar dentro de mi instalador NSIS. Debe ejecutarse después de que se hayan extraído todos los archivos (supongo que esto es obvio, de lo contrario, el archivo por lotes no existiría aún).Ejecutar archivo por lotes en el instalador NSIS

Intenté usar MUI_PAGE_CUSTOMFUNCTION_PRE con la página de finalización para ejecutarlo, pero cuando llega a esa parte del script parece que se salta sobre él. A continuación es cómo lo invoco.

;;Finish Page 
!define MUI_PAGE_CUSTOMFUNCTION_PRE Done 
!insertmacro MUI_PAGE_FINISH 

Function Done 
    ExecWait '"$INSTDIR\BatchFile" "$INSTDIR" "$DATA_FOLDER"' 
FunctionEnd 

Gracias de antemano por su ayuda.

ACTUALIZACIÓN

ahora he intentado usar el siguiente:

ExpandEnvStrings $0 %COMSPEC% 
ExecWait '"$0" /C "$INSTDIR\batch.bat" "$INSTDIR" "$DATA_FOLDER"' 

Esto no funcionó, así que sacó el/C para ver lo que el aviso del cmd estaba diciendo (que está apareciendo, pero cerrando inmediatamente) y parece que ejecuta cmd.exe, pero eso es todo, no completa el resto de la ejecución.

ACTUALIZACIÓN # 2

El conocimiento básico que me llevó a conseguir que funcione se puede encontrar aquí:

Windows batch files: .bat vs .cmd?

Por alguna razón archivos .bat no están de acuerdo con las ExecWait.

Al final:

ExecWait '"$INSTDIR\BatchFile.cmd" "$INSTDIR" "$DATA_FOLDER"' 

funcionaba bien.

+0

Pude ejecutar .bat fi le, tal como lo ha publicado anteriormente para los archivos cmd. También puede suprimir la ventana de comando para que se muestre mediante nsExec :: Exec, en lugar de ExecWait. – Ben

Respuesta

7

Exec [Espera] necesita adecuada citando:

ExpandEnvStrings $0 %COMSPEC% 
ExecWait '"$0" /C "c:\path\to\batch.cmd" "quoted param" normalparam "c:\last param"' 
+1

ignora todo esto, mira la pregunta por lo que encontré. – Nedloh

5

he hecho esto utilizando una extensión ejecutivo con mucho éxito

Ésta es la sintaxis:

SetOutPath $INSTDIR\${APPLICATION_DIR} 
    ExpandEnvStrings $0 %COMSPEC% 
    nsExec::ExecToStack '"C:\path-tobatch-file\commands.bat"' 

Aquí hay un enlace a la NSIS Wiki http://nsis.sourceforge.net/Docs/nsExec/nsExec.txt

+2

Solo para aclarar un poco. Los archivos por lotes deben ejecutarse a través del procesador de comandos: 'cmd/c batch_file.bat' en lugar de simplemente' batch_file.bat'. Uno puede obtener el camino a 'cmd' de% COMSPEC%. – atzz

+0

Eso funcionó muy bien, sin embargo, ¿hay alguna manera de configurarlo para que la consola se muestre mientras se está ejecutando el archivo por lotes? El archivo por lotes realiza una copia/movimiento de una cantidad bastante grande de archivos y no quiero que el usuario piense que no está haciendo nada cuando en realidad lo es. – Nedloh

+0

Para mostrar la salida, solo un Exec directo mostrará la ventana Cmd: Exec '"$ 0"/C "C: \ Path-to-batch \ commands.bat"' – DBQ

Cuestiones relacionadas