2009-05-03 45 views
1

我正在自定義msbuild任務中運行外部進程。此任務在程序集A中,在構建項目B時調用。但是,當試圖清理項目時,Visual Studio 2008給了我一個錯誤:「進程無法訪問程序集A,因爲它正在被另一個進程使用」,重新啓動Visual Studio修復了這個問題什麼進程正在訪問我的程序集(在Visual Studio中清理項目時刪除失敗?)

代碼調用該外部過程如下

工藝過程=新工藝();

PROC ess.StartInfo =新的ProcessStartInfo { 文件名= @ 「C:\的Program.exe」, 參數= 「」, UseShellExecute =假, CreateNoWindow =真, RedirectStandardOutput =真, RedirectStandardError =真 };

process.Start();

process.WaitForExit(5000);

如何解決這樣的問題?

更新:使用進程資源管理器,它告訴我devenv.exe在程序集A上有一個句柄。爲什麼以及如何阻止它處理它?

回答

1

我不完全確定你的問題的目標。您可以使用進程資源管理器找出哪個進程正在鎖定文件。

喜歡的東西在這裏: http://windowsxp.mvps.org/processlock.htm

+0

這是一個不錯的工具。但是,它只是說devenv.exe有一個處理它。 – sean 2009-05-03 14:12:27

+0

我想我的原始問題是由你回答的。我現在要爲目前的問題提出另一個問題,因爲它現在更清楚了。謝謝。 – sean 2009-05-03 16:00:25

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); 
} 

這將至少設置對象的範圍。

+0

是的,我做過。同樣的問題。我想我只需要刪除外部進程和其他東西的一些東西,直到我縮小問題的範圍。 – sean 2009-05-03 14:55:24

相關問題