我有一个.bat文件,其中包含以下两个命令:
"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\Tools\..\IDE\devenv" plugin\proj1-vs15.sln /rebuild "Release" /project plugin\proj1-vs15.vcxproj /projectconfig "Release|x64" 1>vcbuild.log 2>&1
"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\Tools\..\IDE\devenv" plugin\proj2-vs15.sln /rebuild "Release" /project plugin\proj2-vs15.vcxproj /projectconfig "Release|x64" 1>vcbuild.log 2>&1
第一个命令成功完成,但是第二个命令立即失败,并显示消息“该进程无法访问文件,因为该文件正在被另一个进程使用。”
如果我在第二个命令中为重定向输出使用了不同的文件名,则两个命令都将正确完成。
Visual Studio 2015或任何早期版本都没有这个问题,只有VS 2017。
为什么在第一个devenv命令完成后重定向的输出文件仍保持打开状态?
在我的实际用例中,每次执行devenv.exe时,对于重定向输出使用不同的文件名将很不方便。有什么方法可以确保在.bat文件前进到下一个命令之前关闭输出文件?
答案 0 :(得分:1)
devenv
产生的任何子进程都将继承重定向句柄,因此,如果debenv返回其子进程中的任何子进程仍处于打开状态,则文件将保持锁定状态,因此CMD无法第二次打开vcbuild.log
文件。解决方案是将两个构建命令都放在重定向的复合块中。
(
devenv <First Project Arguments>
devenv <Second Project Arguments>
)>"vcbuild.log" 2>&1