Delphi 检查文件是否正在使用以及由哪个应用程序使用?
尝试使用下面提到的方法获取有关锁定文件的更多详细信息 但是,对Delphi 检查文件是否正在使用以及由哪个应用程序使用?,delphi,delphi-2009,windows-api-code-pack,Delphi,Delphi 2009,Windows Api Code Pack,尝试使用下面提到的方法获取有关锁定文件的更多详细信息 但是,对 unkInt.QueryInterface(IID_IFileIsInUse, result) 始终返回E\u NOINTERFACE 平台:Windows7 32位操作系统,打开word文件和.msg文件 已选中从资源管理器打开文件并尝试删除。它显示有关打开文件的应用程序的适当详细信息。在我的应用程序中,我试图显示有关打开文件的应用程序的信息。但是,当尝试将指针强制转换到ifilesinuse接口时,QueryInterfa
unkInt.QueryInterface(IID_IFileIsInUse, result)
始终返回E\u NOINTERFACE
平台:Windows7 32位操作系统,打开word文件和.msg文件
已选中从资源管理器打开文件并尝试删除。它显示有关打开文件的应用程序的适当详细信息。在我的应用程序中,我试图显示有关打开文件的应用程序的信息。但是,当尝试将指针强制转换到ifilesinuse
接口时,QueryInterface
调用失败,返回codeE_NOINTERFACE
,这意味着ROT中的对象没有实现ifilesinuse
。AFASIK,MS Office文件实现了IFileIsInUse
知道这里出了什么问题吗?事实上,您的代码工作正常。问题是,您正在测试的程序实际上没有实现
ifilesinuse
。当系统返回E_NOINTERFACE
时,它是准确的。接口未实现
我用测试仪测试了这个。由该应用程序添加到ROT的文件(该应用程序实现了ifilesinuse
)由您的代码拾取。另一方面,Acrobat 8和Word 2010打开的文件不可用
我从中得出的结论是,ifilesinuse
原则上是一个好主意,但如果应用程序不支持它,它就没有多大用处。而且似乎有一些主要的应用程序并没有这样做
很明显,当您发现未实现
IFileIsInUse
时,您将需要使用一个或多个其他机制来检测哪个应用程序锁定了文件。SysInternals Process Explorer为我删除了一个锁定的.msg文件,该文件导致系统问题,如锁定桌面
- 运行Process Explorer,使用“查找”菜单
- 输入完整路径文件名
- 点击搜索
del
删除锁定的文件,但删除操作挂起了锁
然后,我使用Process Explorer重新启动持有lock-Explorer.exe的进程
然后,
del
成功完成。上的类似问题,但适用于.NET。可能有助于回答您自己的问题。是的。非常感谢。当对象未实现IFileSinuse时,使用回退方法获取数据。
unkInt.QueryInterface(IID_IFileIsInUse, result)