在开发一个小程序,可是经常发现编译时,linking 的时候,那个程序还在,在windows下是不能直接换掉的.
所以.
一开始直接到
project setting中的build event 中 setting 成
taskilll /im pas.exe /f
以为事情过来了
可是,后来发现如果compile时没有进程可杀,上面的语句就会返回一个非零值(为了进一步证明,
我到了command line中,在没有pas.exe进程的情况下,发现该命序的返回值是非零的也就是
echo %errorlevel%
相当于linux 下的
echo $0
由于返回的值非零,导致了visual studio 直接不往下走了.现在要想一个办法让这个命令的返回值不为0,
看了一下
taskkill /?
发现好像也没有想要的结果
而dos下的批处理来在再执行多一条语句,只要保证最后一条语句是成功的,那么返回值是否就一定为0呢?
试了一下,
taskkill /im pas.exe /f & dir echo %errorlevel%
结果是128.....
所以想要不要建立一个console的exe程序后,
system("taskkill /im pas.exe /f"); return 0;
这样就可以保证返回值一定时0,
可是想了一下能不能懒点,
与现就打算把这些动作封在一个批处理里面算了.
@rem just for win7 kill the pas.exe before linking taskkill /im pas.exe /f 1>null1.tmp 2>null2.tmp @rem two command just to generat the ret 0 so the vusial studio not to stop linking del /f /q null2.tmp del /f /q null1.tmp
这样就可以了,其它后面本来一个delete 就可以了.但是不想在编译时看到过多关于这个动作的输出,(像杀掉哪个进程了或没有那个被杀的进程)之类,
于是就重定向了,
但是问题就接着来了,
如果
taskkill /im pas.exe /f 1>null 2>null
那样,会报打开文件失败,可能是由于重定向时多个一起会出问题,于是我就分开来写,,,,
把错误正确的分开两个文件,
之后就变成上面的有点累赘的格式了.