• 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

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

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

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

  • 相关阅读:
    什么是被 GC Roots 直接引用的对象?
    什么情况下JVM内存中的一个对象会被垃圾回收?
    图解GC流程
    图解JVM内存区域划分
    图解JVM类加载机制和双亲委派模型
    Nginx 是怎么工作的?
    ThreadLocal 线程本地存储
    centos7 配置阿里镜像
    C# 类库项目 无法创建 “资源字典” 文件
    linux 启动jar包 指定yml配置文件和输入日志文件
  • 原文地址:https://www.cnblogs.com/vimmer/p/3037278.html
Copyright © 2020-2023  润新知