VC编译前先把当前应用杀掉

在开发一个小程序,可是经常发现编译时,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

那样,会报打开文件失败,可能是由于重定向时多个一起会出问题,于是我就分开来写,,,,

把错误正确的分开两个文件,

之后就变成上面的有点累赘的格式了.

 

posted on 2013-04-23 11:22  Orz..  阅读(163)  评论(0编辑  收藏  举报

导航