使用devenv.exe命令运行太快的问题

21

我有一个想要运行的命令,它看起来像这样:

for /r %n in ("*.vdproj") do "C:/Program Files/Microsoft
 Visual Studio 10.0/Common7/IDE/devenv.exe" %n /build "BuildServer"

看起来它可以运行每个 .vdproj 文件上的 devenv,但似乎是并行运行并立即返回。这是个问题,我需要在 .bat 文件中下一步操作运行之前等待它们全部完成。我该如何:

1- 让 for 等待每个 devenv 完成后再运行下一个

或者

2- 等待所有 devenv.exe 运行结束再继续进行后续操作?


你确定不需要%n%吗?或者是%%n%%?如果不是这个问题,那么有两种可能。第一种是devenv.exe是否真的在做某些事情,还是立即失败,让你误以为它在并行运行你的列表?例如,你尝试从命令行执行for循环的一个迭代(没有for循环),填入已知的、存在的dir/file值来测试吗?第二种方法是使用任务管理器上的进程选项卡,按进程名称排序,看看你的系统上是否有大量的devenv.exe正在运行。这将证明我的第一个问题不相关。祝好运。 - shellter
如果我查看任务管理器,我会看到一堆Devenv.exe在运行,它们似乎会完成并最终停止。 - GWLlosa
2个回答

49

诀窍是使用devenv.com而不是devenv.exedevenv.com将输出返回到控制台并实现完全符合要求的结果。


如果它是一台64位机器呢? - dbenham
哦,那可能是一个更大的问题。但是你不能从32位cmd界面运行.com文件吗? - GWLlosa
@Petoj +1。我也在64位的W7上,它对我来说运行良好。 - TarkaDaal
除了devenv.com似乎不能使用“/Upgrade”开关(据我所知,它根本不起作用)。 - Cameron
devenv.com还将ERRORLEVEL设置为0以表示成功构建,或者设置为正数以表示构建失败,这对于跟踪构建脚本的成功非常重要。 - MikeOnline
显示剩余3条评论

5
使用start调用devenv.exe,例如:
start /wait "" "C:/Program Files/Microsoft Visual Studio 10.0/Common7/IDE/devenv.exe" %n /build "BuildServer"

使用start /?查看用法。


我尝试过那个方法,但它仍然立即返回...不确定是否因为devenv自己在单独的线程上启动并返回游戏,但是start /wait /B根本没有起作用。 - GWLlosa
有趣。我脑海中另一个可行的解决办法是绕过devenv直接调用msbuild。 - sorpigal
1
不幸的是,这确实是解决msbuild的方法... MSBuild.exe无法直接处理.vdproj(安装程序/合并模块)项目。 - GWLlosa
此外,几年后,MSBuild 也不支持 C# 6.0 的特性。 - Wai Ha Lee
1
这个有效!这个有效!(而且 .com 对我来说在 Windows 10 上不起作用)。但是——你必须传递一个空的标题字符串给 start,否则它会认为第一个带引号的参数是窗口的标题,并做出奇怪的事情。我建议进行编辑。 - Cameron
1
此外,"%VS100COMNTOOLS%"\..\IDE\devenv.exe 可以用作路径,无论 VS 安装在哪里(以及操作系统的位数),都可以实现可移植性。 - Cameron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接