题
关于使用句柄或< a href=“ http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx” rel=“ noreferrer”>进程监视器,但我希望能够自己找到代码(C#) 哪个进程正在锁定文件。
我有种讨厌的感觉,我不得不在win32 API中摸索,但是如果有人已经做到这一点并且可以让我走上正确的道路,我将非常感谢您的帮助。
更新
链接到类似问题
解决方案
handle.exe
的优点之一是您可以将其作为子进程运行并解析输出。
我们在部署脚本中执行此操作-就像一个超级按钮。
其他提示
很久以前,不可能可靠地获取锁定文件的进程列表,因为Windows根本不跟踪该信息。要支持重启管理器API ,现在可以跟踪该信息。
我整理了一些代码,这些代码采用文件的路径,并返回锁定该文件的所有进程的通用标记代码。 通用标签
此调用访问注册表。如果该过程没有权限,您将得到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和更高版本。见
这适用于被其他进程锁定的dll。例如,此例程不会发现文本文件已被文字处理程序锁定。
C#: 通用标签
VB.Net: 通用标签
使用linq更简单: 通用标签