【发布时间】:2016-07-27 19:50:46
【问题描述】:
我这里有一个大问题,无法解决。我正在开发一个更新软件,即使在运行进程的计算机上也需要工作。所以如果复制或其他处理导致异常,我需要杀死导致错误的进程并重试并继续更新。问题是我杀死了这些进程,但 Windows 继续对我说,即使我杀死了它们,也有一些进程打开。
所以我有一种方法可以在运行进程的计算机上复制更新文件。我使用 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 文件的进程后是否被锁定并且它没有被锁定:
Is there a way to check if a file is in use?
请帮帮我。 谢谢
【问题讨论】:
标签: c# file process ioexception fileinfo