Delphi 以编程方式检查计算机管理-共享文件夹-打开文件以查找文件

Delphi 以编程方式检查计算机管理-共享文件夹-打开文件以查找文件,delphi,client,Delphi,Client,我们有一个客户端服务器软件需要更新。我需要检查文件当前是否正在被访问。这是可能的,如果可能的话,如何德尔福代码。我唯一能看到文件是否打开的地方是“共享文件夹”“打开文件”下。我试过这段代码,但只是显示文件没有打开 function TfrmMain.FileInUse(FileName: string): Boolean; var H_File : HFILE; begin Result := False; if not FileExists(FileName) then b

我们有一个客户端服务器软件需要更新。我需要检查文件当前是否正在被访问。这是可能的,如果可能的话,如何德尔福代码。我唯一能看到文件是否打开的地方是“共享文件夹”“打开文件”下。我试过这段代码,但只是显示文件没有打开

function TfrmMain.FileInUse(FileName: string): Boolean;

var H_File : HFILE;
begin
  Result := False;

  if not FileExists(FileName) then
    begin
    showmessage ('Doesnt Exist');
    exit;
    end;
  H_File := CreateFile(PChar(FileName), GENERIC_READ or GENERIC_WRITE, 0,
    nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

  Result := (H_File = INVALID_HANDLE_VALUE);
  showmessage('Opened');
  if not Result then
    CloseHandle(H_File);
end;

您可以通过Windows提供的WBEM子系统访问大量信息。我相信有很好的WBEM组件,但是您也可以导入“MicrosoftWMI脚本”COM类型库(尽管这需要一些工作来了解它是如何工作的)


如果您查询对象,您会得到当前正在使用的项目列表,就像您可以使用管理工具中的“计算机管理”工具查看一样。

不一定是答案,但我目前正在做类似的事情——因为主可执行文件可能会在工作时间更新,尽管我已经创建了一个中间应用程序来检查文件的本地缓存副本是否是最新的,然后我运行这个本地缓存副本。

我发现,有人建议使用

当你提到“文件”时,你是什么意思?一个需要更新的exe文件,所以我需要确保在删除和替换文件之前它没有打开。@Jason:也许你不必这么做。您可以替换正在使用的可执行文件,请参阅我想检查exe是否正在运行,如果是,我将杀死它,然后替换exe。以及运行脚本和其他一些东西。它需要确保每个人都不参与该计划。但是这个链接非常有用,谢谢。我查看了Win32_ServerConnection对象,它显示了打开的文件数量,但没有显示文件名。