0

我有一个必须删除文件的场景。我不知道也不关心谁持有文件。我必须删除它,他们可以为我所关心的一切而粉碎。(我不想杀死锁定任务)

我想到的唯一解决方案是使用http://www.emptyloop.com/unlocker/命令行界面。

MoveFileEx 不是和选项,因为我无法重新启动机器。

有没有更多的 C#ish 方法/库呢?

我不喜欢使用控制台应用程序 API

万一不清楚。我知道所涉及的风险,我不需要讲授为什么这是一种不好的做法。如果你知道怎么做我问的。非常感谢!

如果你想讲述为什么这很糟糕 - 只是不要找其他人来打扰##

4

2 回答 2

1

我无法为您提供解决方案,但可以为您指明方向。

Window 的Process Explorer有一个功能可以让你搜索句柄: 在此处输入图像描述

然后,当您选择该句柄时,您将转到拥有该句柄的进程,您可以右键单击它并关闭该句柄并解除该进程对该文件的锁定。

所以基本上你需要找出 Process explorer 正在使用哪些 API 调用,并在你的应用程序中自己执行它们。

于 2014-08-21T07:04:07.200 回答
0

我认为由于锁的性质,您所要求的是不可能的。
如果另一个程序可以在您读取数据时抢夺您的文件并擦除它们,您会有什么感觉?

我相信这些解锁器会检测到该进程并尝试强制它以一种或另一种方式释放它的锁定(甚至可能关闭他们的进程)。
虽然这可能适用于大多数应用程序,但有些应用程序会更具攻击性(例如病毒扫描程序)。

因此,也许您需要问自己是否要增加获得锁定的机会,或者是否需要绝对确保获得锁定。

编辑:
假设您可以终止更衣室进程并且您真的想清除这些文件(无论后果如何),您可以找到持有锁的进程并将其关闭。在这个线程他们提供了一些解决方案,用于通过句柄、win32 dll 甚至计划 .NET 代码跟踪哪个进程持有锁(在 c# 代码中)。

免责声明
请注意,关闭这样的进程会对程序的一致性产生可怕的影响,你甚至可能做的坏事比好事更多(假设它正在将它的状态写入数据库,并且中途它被终止)

于 2014-08-21T06:22:43.933 回答