C#:查询远程服务器以查看哪个用户对文件进行了锁定

时间:2019-05-26 10:28:17

标签: c# active-directory wmi

**编辑:原始问题不清楚。我无法在任何.Net程序集中找到IADsFileServiceOperations,这就是问题所在-不是因为我不知道如何使用它**

我已经闲逛了几个小时,无法解决这个问题...

在C#中,有没有一种方法可以查询远程文件服务器(最好使用if (control is RadioButton rb) { rb.Text = text; } else if (control is Label lbl) { lbl.Text = text; } else if (control is Button btn) { btn.Text = text; } ,但不一定要查询),并询问它当前哪个用户已锁定文件?

我能想到的最好的是

ManagementObjectSearcher

但是对于我的一生,我无法弄清楚如何在.Net项目中使用var en = new DirectoryEntry($@"\\{hostName}\root\cimv2"); var fso = sessQuery.NativeObject as IADsFileServiceOperations; var resources = fso.Resources();

帮助...?拜托...?

1 个答案:

答案 0 :(得分:1)

IADsFileServiceOperations是一个公开两种方法的接口:

  1. IADsFileServiceOperations :: 资源
  2. IADsFileServiceOperations :: 会话

https://docs.microsoft.com/en-us/windows/desktop/api/iads/nn-iads-iadsfileserviceoperations#methods

  

IADsFileServiceOperations :: Resources方法获取一个指向   指向IADsCollection接口的指针   资源对象,表示此文件上的当前打开的资源   服务。

var en = new DirectoryEntry($@"\\{hostName}\root\cimv2");
var fso = sessQuery.NativeObject as IADsFileServiceOperations;
var resources = fso.Resources(); // returns resource objects representing the current open resources on the file

foreach(var res in resources)
{
   // res.User
   // res.Path
   // res.LockCount
   if(res.LockCount > 0)
   {
      // user has lock on file
   }
}

更新1:

要将活动目录类型添加到您的.NET项目中,需要向该项目添加COM引用。转到添加引用对话框,然后在COM标签上添加Active DS Type Library

通过添加此COM参考,您可以使用AD拥有所有ActiveDS类型和接口。

希望它可以解决您的问题。