我在這裏有一個大問題,無法修復它。我正在開發一款工作更新軟件,即使在運行流程的計算機上也需要工作。因此,如果複製或其他處理導致異常,我需要終止導致錯誤的進程並重試並繼續更新。問題是我殺了這些進程,但窗口繼續告訴我,即使我殺了它們,也有一些進程被打開。如何在殺死進程後避免IOException?
所以我有一臺計算機上覆制更新的文件,其中進程正在運行的方法。我使用了Process.GetProcessesByName(「processName」)和下面的解決方案來終止進程。
Using C#, how does one figure out what process locked a file?
這是我的代碼:
try
{
file.CopyTo(destAbsolutePath, true);
}
catch (IOException ioException)
{
foreach (var process in Process.GetProcessesByName(file.Name.Replace(Path.GetExtension(file.Name), "")))
{
process.Kill();
}
foreach (Process p in Win32Processes.GetProcessesLockingFile(file.FullName))
{
p.Kill();
}
file.CopyTo(destAbsolutePath, true);
}
我問我的Windows是否需要時間去了解,如果一個進程被殺死。我試圖等一下,但沒有發生。如果我在殺掉這些進程並重新打開之後關閉了我的應用程序,則不會再出現錯誤。如果我用GetCurrentProcess.Kill()
殺死了我的應用程序,錯誤就停留在那裏。我不認爲這是我的應用程序導致IOException,因爲我只循環FileInfo對象。
我想這個解決方案來檢查,如果我的文件(我殺過程中使用的一個.dll自定義文件)被殺死誰用我的.dll文件的過程後,鎖定它wan't鎖定:
Is there a way to check if a file is in use?
請幫幫我。 感謝
我試圖調用WaitForExit(),但問題留在那裏。最後,即使我殺了我的應用程序並重新打開它,我也有錯誤。 –
哦,我重試了2-3分鐘後,最後一個錯誤重新啓動我的程序,並沒有更多的錯誤......這個問題應該是什麼? –
好的,我發現了這個問題,但我需要有人幫助我解決它。在我的工作中,有幾臺電腦組成的模擬器。我需要殺死所有計算機上的進程。那麼如果我知道計算機已經連接並一起工作,那麼如何列出所有計算機進程呢? –