Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 检查文件是否正在使用以及由哪个应用程序使用?_Delphi_Delphi 2009_Windows Api Code Pack - Fatal编程技术网

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
调用失败,返回code
E_NOINTERFACE
,这意味着ROT中的对象没有实现
ifilesinuse
。AFASIK,MS Office文件实现了
IFileIsInUse


知道这里出了什么问题吗?

事实上,您的代码工作正常。问题是,您正在测试的程序实际上没有实现
ifilesinuse
。当系统返回
E_NOINTERFACE
时,它是准确的。接口未实现

我用测试仪测试了这个。由该应用程序添加到ROT的文件(该应用程序实现了
ifilesinuse
)由您的代码拾取。另一方面,Acrobat 8和Word 2010打开的文件不可用

我从中得出的结论是,
ifilesinuse
原则上是一个好主意,但如果应用程序不支持它,它就没有多大用处。而且似乎有一些主要的应用程序并没有这样做


很明显,当您发现未实现
IFileIsInUse
时,您将需要使用一个或多个其他机制来检测哪个应用程序锁定了文件。

SysInternals Process Explorer为我删除了一个锁定的.msg文件,该文件导致系统问题,如锁定桌面

  • 运行Process Explorer,使用“查找”菜单
  • 输入完整路径文件名
  • 点击搜索
为了删除锁定的文件,我打开了一个cmd窗口,试图
del
删除锁定的文件,但删除操作挂起了锁

然后,我使用Process Explorer重新启动持有lock-Explorer.exe的进程


然后,
del
成功完成。

上的类似问题,但适用于.NET。可能有助于回答您自己的问题。是的。非常感谢。当对象未实现IFileSinuse时,使用回退方法获取数据。
unkInt.QueryInterface(IID_IFileIsInUse, result)