我发现了一个类似的问题here,但它已被关闭/接受并回答“不要这样做”。
我处在这样一种情况,我不关心其他应用程序发生了什么,我想要一个可能被其他人锁定的文件(如果需要可以粗暴地),并且可以使用它。我可能需要移动,重命名或删除此文件。
基本上我需要处理由不清理它的锁的应用程序创建的目录中的文件。我知道应用程序在我的调用时已完成处理,但我需要在运行时终止锁定。此外,我似乎与扫描服务器所在的远程共享的本地AV软件的读取相冲突。
所有这些加起来无法解决“强制关闭”的情况,所以我可以做我需要的事情。有没有人知道该怎么做?
答案 0 :(得分:3)
首先,你可以使用这篇文章来验证它是锁定它们的狡猾的应用程序:
How do I find out which process is locking a file using .NET?
然后这篇文章概述了一种关闭它们的方法:
答案 1 :(得分:2)
这可能是无关紧要的,如果请某人发表评论,但我曾经在浏览器中使用过,以解决文件锁问题。
如果某个文件被一个已经死亡的进程锁定,Windows通常不允许您删除它,但如果您在其他地方创建了一个同名的新文件,则将其移动到它将成功的文件夹中。然后你可以删除新文件,一切都很顺利
要将它用于您的应用程序,您必须能够在执行此操作之前读取文件并将其保存在内存中,然后在删除旧文件后将其写回。
也许它会有所帮助,也许不会,但值得尝试。
答案 2 :(得分:1)
foreach (var process in Process.GetProcessesByName("excel")) //whatever you need to close
{
if (process.MainWindowTitle.Contains("test.xlsx"))
{
process.Kill();
break;
}
}
或
foreach (var process in Process.GetProcesses())
{
if (process.MainWindowTitle.Contains("test.dat"))
{
process.Kill();
break;
}
}