如何使用Grunt生成具有特殊字符的Windows命令行?

时间:2015-01-16 17:40:55

标签: gruntjs inno-setup

我在窗户上。为了构建我的应用程序,我曾经做过很多手动文件操作,最后一步是运行这个命令:

"c:\Program Files\Inno Setup 5\ISCC.exe" /dType=server /dBits=32 /dArchAllowed="x86 x64" config.iss

请注意,/d选项是将一些自定义变量传递给Inno Setup。

最近发生了变化,我们决定使用Grunt自动完成任务。所有的文件操作都运行正常。但我无法正确执行最后一步(运行命令行)。

我试过了:

grunt.task.registerTask('create-exe', 'create the installer', spawnTask({
    cmd: 'c:\\Program Files\\Inno Setup 5\\ISCC.exe', 
    args: ['/dType=server' , '/dBits=32' ,'/dArchAllowed="x86 x64"', 'config.iss' ]
}));

但Inno Setup并不满意:

stderr: 'Error on line 38 in config.iss: 
Value of [Setup] section directive "ArchitecturesAllowed" is invalid.',

所以,参数/dArchAllowed="x86 x64"出了问题(如果我删除它就会运行。但是我需要这个参数。)这是一个令人讨厌的问题:它有双引号,等于和空格!我尝试了很多组合来逃避特殊角色,但没有成功。

任何想法?谢谢!

1 个答案:

答案 0 :(得分:2)

我在this help page找到了答案。

/d命令行编译器参数值不能用双引号括起来。因此,我刚刚将'/dArchAllowed="x86 x64"'替换为'/dArchAllowed=x86 x64'属性中的args

整个咕噜声的任务是:

grunt.task.registerTask('create-exe', 'create the installer', spawnTask({
    cmd: 'c:\\Program Files\\Inno Setup 5\\ISCC.exe', 
    args: ['/dType=server' , '/dBits=32' ,'/dArchAllowed=x86 x64', 'config.iss' ]
}));