关于使用句柄或< a href=“ http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx” rel=“ noreferrer”>进程监视器,但我希望能够自己找到代码(C#) 哪个进程正在锁定文件。

我有种讨厌的感觉,我不得不在win32 API中摸索,但是如果有人已经做到这一点并且可以让我走上正确的道路,我将非常感谢您的帮助。

更新

链接到类似问题

有帮助吗?

解决方案

handle.exe的优点之一是您可以将其作为子进程运行并解析输出。

我们在部署脚本中执行此操作-就像一个超级按钮。

其他提示

很久以前,不可能可靠地获取锁定文件的进程列表,因为Windows根本不跟踪该信息。要支持重启管理器API ,现在可以跟踪该信息。

我整理了一些代码,这些代码采用文件的路径,并返回锁定该文件的所有进程的通用标记代码。 通用标签

使用受限权限(例如IIS)

此调用访问注册表。如果该过程没有权限,您将得到ERROR_WRITE_FAULT,含义常规语言标签代码。您可以有选择地将您的受限帐户的权限授予注册表的必要部分。尽管让您有限的访问进程设置一个标志(例如在数据库或文件系统中,或者通过使用进程间通信机制(例如队列或命名管道))并让第二个进程调用Restart Manager API,这是更安全的。

向IIS用户授予非最小权限是一种安全风险。

从C#调用Win32非常复杂。

您应该使用来自 http://technet.microsoft的工具Handle.exe.com / en-us / sysinternals / bb896655.aspx

之后,您的C#代码必须为以下代码: 通用标签

我遇到了 stefan的解决方案。下面是一个修改的版本,看起来似乎很好用。 通用标签

更新

如果只想知道哪些进程正在锁定特定的DLL,则可以执行并解析tasklist /m YourDllName.dll的输出。适用于Windows XP和更高版本。见

这是做什么的?任务列表/ m“ mscor *”

这适用于被其他进程锁定的dll。例如,此例程不会发现文本文件已被文字处理程序锁定。

C#: 通用标签

VB.Net: 通用标签

使用linq更简单: 通用标签

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top