在尝试在Visual Studio中编译.net应用程序之前,我正尝试从ant脚本执行iisvdir来清理并创建虚拟目录。我遇到了一个奇怪的错误,一个构建服务器,但另一个正在运行脚本没有任何问题。
<exec dir="${SYSTEM32}" executable="cscript" failonerror="true">
<arg line='iisvdir.vbs /create "Default Web Site" ${RS_VIRTUAL_DIR} "${env.WORKSPACE}"'/>
</exec>
结果:
[exec] Microsoft (R) Windows Script Host Version 5.6
[exec] Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.
[exec]
[exec] Input Error: Can not find script file "c:\windows\system32\iisvdir.vbs".
然后
<exec dir="${SYSTEM32}" executable="cmd" failonerror="true">
<arg line='cscript iisvdir.vbs /create "Default Web Site" ${RS_VIRTUAL_DIR} "${env.WORKSPACE}"'/>
</exec>
结果
[exec] 'reate' is not recognized as an internal or external command,
[exec] operable program or batch file.
有人可以帮我弄清楚可能出现的问题吗?
答案 0 :(得分:0)
我不知道这是否是您遇到问题的原因,但我注意到您使用单引号(')来表示&lt; arg line ='。我看过的所有例子都使用双引号(“)我知道你用双引号括起空格的项目,所以可能需要将它们转义出来?也许将代码移动到批处理文件中,你可以在运行之前测试它蚂蚁?
不确定这是否会有所帮助,但可以指出正确的方向。
答案 1 :(得分:0)
例如:
cmd.exe echo Hello
...忽略参数并以子shell的形式运行另一个交互式命令提示符。
cmd.exe /c echo Hello
...运行“echo Hello”语句并立即返回。注意:如果希望cmd.exe在运行语句后以交互方式继续运行(在构建脚本中通常不是一个好主意),则可以使用/ K.
你的命令:
cmd.exe cscript iisvdir.vbs /create etc.
...正在解析,好像你真的说过:
cmd.exe /c reat etc.
这是因为cmd.exe(与大多数MS命令行工具一样)具有奇怪的命令行解析功能。
更新:这是64位操作系统吗?如果Ant是32位任务,那么它实际上(静默地)在C:\Windows\SysWOW64
中查找cscript.exe和iisvdir.vbs。他们在吗?如果没有,您应该使用C:\Windows\SysNative
。在32位任务中,这是真正的C:\Windows\System32
目录的别名。