2010-07-16 11 views
13

Ich habe eine Batch-Datei, die ich in meinem NSIS-Installer ausführen muss. Es muss laufen, nachdem alle Dateien extrahiert wurden (ich nehme an, das ist offensichtlich, sonst wäre die Batch-Datei noch nicht vorhanden).Batch-Datei im NSIS-Installationsprogramm ausführen

Ich habe versucht, MUI_PAGE_CUSTOMFUNCTION_PRE mit der Zielseite zu verwenden, um es auszuführen, aber wenn es zu diesem Teil des Skripts kommt, scheint es, dass es überspringt. Unten ist, wie ich es anrufe.

;;Finish Page 
!define MUI_PAGE_CUSTOMFUNCTION_PRE Done 
!insertmacro MUI_PAGE_FINISH 

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

Vielen Dank im Voraus für Ihre Hilfe.

UPDATE

Ich habe jetzt mit folgendes versucht:

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

Dies funktionierte nicht, so habe ich die/C out (es zu sehen, was die cmd Aufforderung sagte erscheint, aber schließt sofort) und es scheint, als ob es cmd.exe ausführt, aber das ist es, es vervollständigt den Rest der Ausführung nicht.

UPDATE # 2

Das Kernwissen, das mir geführt bekommen es kann zu arbeiten, finden Sie hier:

Windows batch files: .bat vs .cmd?

Aus welchem ​​Grund .bat-Dateien nicht zustimmen ExecWait.

Am Ende:

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

funktionierte gut.

+0

Ich konnte .bat fi laufen le, genau wie du es oben für cmd-Dateien geschrieben hast. Sie können auch das Anzeigen des Befehlsfensters unterdrücken, indem Sie nsExec :: Exec anstelle von ExecWait verwenden. – Ben

Antwort

7

Exec [Wait] muss eine angemessene Zitieren:

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

ignoriere das alles, siehe Frage nach dem, was ich gefunden habe. – Nedloh

5

ich getan habe dies sehr erfolgreich eine exec-Erweiterung mit

Dies ist die Syntax:

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

Hier ist ein Link auf die NSIS Wiki http://nsis.sourceforge.net/Docs/nsExec/nsExec.txt

+2

Nur um ein bisschen zu verdeutlichen. Batch-Dateien müssen über den Befehlsprozessor ausgeführt werden: 'cmd/c batch_file.bat' anstatt nur' batch_file.bat'. Man kann den Pfad zu "cmd" von% COMSPEC% beziehen. – atzz

+0

Das hat gut funktioniert, gibt es jedoch eine Möglichkeit, es so einzustellen, dass die Konsole angezeigt wird, während die Batch-Datei ausgeführt wird? Die Batch-Datei kopiert/verschiebt eine anständig große Anzahl von Dateien, und ich möchte nicht, dass der Benutzer denkt, dass es nichts tut, wenn es in Wirklichkeit ist. – Nedloh

+0

Um die Ausgabe anzuzeigen, nur eine gerade Exec zeigt das Cmd-Fenster: Exec '"$ 0"/C "C: \ Pfad zu Batch \ commands.bat"' – DBQ

Verwandte Themen