首页 文章

访问我的程序集的过程是什么(在Visual Studio中清理项目时删除失败?

提问于
浏览
1

我在自定义的msbuild任务中运行外部进程 . 这个任务在程序集A中,当我构建项目B时调用它 . 一切正常 . 但是,在尝试清理项目时 . Visual Studio 2008给出了一个错误,指出“进程无法访问程序集A,因为它正被另一个进程使用” . 重新启动Visual Studio可以解决此问题 .

调用外部进程的代码如下

流程流程=新流程();

process.StartInfo = new ProcessStartInfo {FileName = @“c:\ program.exe”,Arguments =“”,UseShellExecute = false,CreateNoWindow = true,RedirectStandardOutput = true,RedirectStandardError = true};

的Process.Start();

process.WaitForExit(5000);

我如何解决这样的问题?

更新:使用Process Explorer,它告诉我devenv.exe在程序集A上有句柄 . 为什么以及如何阻止它有句柄?

2 回答

  • 1

    我不完全确定你的问题的目标 . 您可以使用进程资源管理器找出锁定文件的进程 .

    像这里的东西:http://windowsxp.mvps.org/processlock.htm

  • 0

    这是正常的... devenv.exe正在执行该过程,但句柄仍然存在 . 我不确定你怎么能避免这种情况,但我确信几分钟后手柄可能会消失 .

    我不确定垃圾收集是否与它有关,但你尝试过这样的事吗?:

    using (Process process = new Process()){
    
    process.StartInfo = new ProcessStartInfo { FileName = @"c:\program.exe", Arguments = "", UseShellExecute = false, CreateNoWindow = true, RedirectStandardOutput = true, RedirectStandardError = true };
    
    process.Start();
    
    process.WaitForExit(5000);
    }
    

    这至少会设置对象的范围 .

相关问题