关于主程序用process.start启动外部程序,外部程序启动后Kill不掉主程序的问题
主程序a.exe
在a的代码中用process.start("b.exe")程序,然后b.exe启动后需要kill掉a.exe,虽然kill后在进程列表中没有找不到a.exe了,但是到相应目录下去删除a.exe时却删除不掉,显示“无法删除 a.exe:访问被拒绝。请确认磁盘未满或未被写保护而且文件未被使用”,应该还是被占用了。查了MSDN,大概说是process.start启动的外部程序与主程序存在资源关联,估计是这个原因造成b.exe虽然kill了a.exe,但还是不能删除a.exe。请教如何让a.exe启动b.exe后,b.exe能否kill掉a.exe的进程且能删除a.exe这个文件。
备注:为何要实现这个。主要是用于升级程序,宿主程序启动升级程序,升级程序kill并删掉宿主程序,然后用下载的升级文件替换宿主程序。由于宿主程序一直被占用不能被删除,也不能被替换,造成无法升级。谁有更好的办法啊??

解决方案 »

  1.   

    terminalprocess 在c#中如何实现??terminalprocess在哪个DLL中?
      

  2.   

    不会啊,直接
    Process.Start("a.exe");
    this.close();是可以的,不会存在保护问题,贴一下你的代码看看
      

  3.   

    to xwdd129:
    我的代码:a.exe代码中
    process.start("b.exe","args");
    b.exe运行起来后你试试关掉a.exe,尝试下到a.exe目录下能否删除a.exe,我试了删除不了a.exe。也试了你的代码
    process.start("b.exe","args");
    this.close();
    效果一样,也无法删除a.exe文件。无法删除的原因是a.exe还是被占用了。
      

  4.   

    terminalprocess API也试了,能结束a.exe的进程,但是进入a.exe目录还是删不掉a.exe文件。
      

  5.   

    结果都是只有在关闭了外部程序b.exe后才能删除a.exe这个文件。
      

  6.   

    hehe,不好意思,浪费大家的时间了,问题发现了,原来是主程序经过代码混淆后的问题,我用xenocode的postbuild混淆生成的主程序碰到了上述的问题,而没有经过混淆的程序则没有这个问题。现在在找有什么办法能解决经过postbuild混淆后的主程序的这个问题。
      

  7.   

    我现在碰到的问题和你碰到的问题是一样的,也是被混淆过之后, 任务管理器里出现了两个一样的进程,更新的程序我双击运行就可以正常替换,而使用process.start启动的程序就没有此权限,可能是process.start启动的程序权限不够,我感觉是这个原因,但是我也一直没有解决,等待ing...
      

  8.   

    我也碰到这个问题了,也是这样,难道如果做升级程序,就不能用混淆?做混淆了以后,就不能用到process?