2010-07-16 6 views
13

Ho un file batch che devo eseguire nel mio programma di installazione NSIS. Deve essere eseguito dopo che tutti i file sono stati estratti, (suppongo che sia ovvio, altrimenti il ​​file batch non esisterebbe ancora).Esecuzione del file batch nel programma di installazione NSIS

Ho provato a utilizzare MUI_PAGE_CUSTOMFUNCTION_PRE con la pagina finale per eseguirlo, ma quando arriva a quella parte dello script sembra che salti proprio sopra. Di seguito è come lo invoco.

;;Finish Page 
!define MUI_PAGE_CUSTOMFUNCTION_PRE Done 
!insertmacro MUI_PAGE_FINISH 

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

Grazie in anticipo per il vostro aiuto.

UPDATE

Ora ho provato ad utilizzare il seguente:

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

Questo non ha funzionato, così ho preso il/C per vedere ciò che il richiamo del cmd stava dicendo (si sta spuntando, ma chiudendo immediatamente) e sembra come se eseguisse cmd.exe ma il gioco è fatto, non completa il resto dell'esecuzione.

UPDATE # 2

le conoscenze di base che ha portato a me convincerlo per lavorare può essere trovato qui:

Windows batch files: .bat vs .cmd?

Per qualsiasi motivo .bat file non sono d'accordo con ExecWait.

Alla fine:

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

ha lavorato bene.

+0

Sono stato in grado di eseguire .bat fi le, proprio come hai postato sopra per i file cmd. È anche possibile disattivare la visualizzazione della finestra di comando utilizzando nsExec :: Exec, anziché ExecWait. – Ben

risposta

7

Exec [Attesa] bisogno di una corretta citando:

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

ignorare tutto questo, vedere la domanda per quello che ho trovato. – Nedloh

5

Ho fatto questo utilizzando un'estensione exec molto successo

Questa è la sintassi:

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

Ecco un link al NSIS Wiki http://nsis.sourceforge.net/Docs/nsExec/nsExec.txt

+2

Giusto per chiarire un po '. I file batch devono essere eseguiti tramite il processore dei comandi: 'cmd/c batch_file.bat' invece di solo' batch_file.bat'. Si può ottenere il percorso di 'cmd' da% COMSPEC%. – atzz

+0

Ciò ha funzionato alla perfezione, tuttavia, esiste un modo per impostarlo in modo che la console venga visualizzata mentre il file batch è in esecuzione? Il file batch esegue una copia/spostamento di un numero decentemente elevato di file e non voglio che l'utente pensi che non stia facendo nulla quando in realtà lo è. – Nedloh

+0

Per visualizzare l'output, solo un Exec diretto visualizzerà la finestra Cmd: Exec '"$ 0"/C "C: \ Path-to-batch \ commands.bat"' – DBQ