2016-08-05 100 views
1

我在使用NSIS安装程序中的某些参数运行批处理文件时遇到问题。在NSIS安装程序中执行批处理文件的问题

我已按照 Executing Batch File in NSIS installer

命令我使用提到的指令是

SetOutPath “$ INSTDIR \ 64 bitRegistration”

ExpandEnvStrings $ 0%COMSPEC%

ExecWait'“$ 0”“$ INSTDIR \ 64-bitRegistration \ EIQServersRegistration.cmd”“$ INSTDIR \ Param1”“$ INSTDIR \ Param2”“$ INSTDIR \ Param3”“$ I NSTDIR \ Param4“”$ INSTDIR \ Param5“'

我使用.cmd代替.bat。我引用了ExecWait的参数。

我面对的是它打开命令提示符,什么都不做。命令提示符未采用批处理文件,也不执行批处理文件。

有人能指出我失踪的是什么。

回答

1

使用%COMSPEC%时,必须在参数前加上/ C来告诉cmd.exe您要执行命令行的其余部分。这只有一半的故事,因为cmd.exe有愚蠢的报价处理,你必须禁用if 1==1黑客:

Section 
; Create test batch file: 
InitPluginsDir 
StrCpy $InstDir $PluginsDir 
CreateDirectory "$INSTDIR\64-bitRegistration" 
FileOpen $0 "$INSTDIR\64-bitRegistration\EIQServersRegistration.cmd" w 
FileWrite $0 '@echo off$\n' 
FileWrite $0 'Title Test batch %*$\n' 
FileWrite $0 'dir /S/B %windir%\*shell32*$\n' ; Some long running command 
FileClose $0 

; Run it: 
ExpandEnvStrings $0 %COMSPEC% 
ExecWait '"$0" /C if 1==1 "$INSTDIR\64-bitRegistration\EIQServersRegistration.cmd" "foo" bar "b a z"' 

; Or let Windows select the batch handler: 
ExecWait '"$INSTDIR\64-bitRegistration\EIQServersRegistration.cmd" "foo" bar "b a z"' 
SectionEnd