【发布时间】:2013-08-05 19:20:55
【问题描述】:
场景(强制删除文件,重启后无法删除):
- 我有一个文件在某个程序中打开,比如 M.S.单词。可能还有一些其他文件也在 M.S. 中打开。字。
- 在我的 C# 程序中,我需要知道哪个进程正在访问该特定文件,并且只需要从 Word 中关闭/释放该特定文件。其他文件不应该被打扰,所以我不会使用 Process.Kill() 方法。
鉴于上述情况,我做了以下事情:
找到使用代码here访问我的目标文件的进程(进程类的实例)
找到该进程持有的句柄列表(使用 NtQuerySystemInformation() 方法)。
- 从句柄列表中,我能够找到保存我的文件的特定句柄(使用 NtQueryObject() 方法)。尝试在此句柄上调用 CloseHandle(),但不起作用。
- 现在我还可以列出目标进程中的所有子窗口句柄。
如何找到与我在上面第 3 步中找到的文件句柄相关的特定窗口句柄?我的计划是使用带有 WM_CLOSE 消息的 SendMessage() 方法到该特定窗口,以便将其关闭并释放我的文件。
一种方法是检查该子窗口标题中的文件名字符串,然后关闭该窗口。但问题是,同名文件可能已从其他位置打开。
【问题讨论】:
标签: c# process filehandle window-handles