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

C#:查询远程服务器以查看哪个用户锁定了文件,c#,active-directory,wmi,C#,Active Directory,Wmi,**编辑:原来的问题不清楚。我在任何.Net程序集中都找不到IADsFileServiceOperations,这就是问题所在——并不是我不知道如何使用它** 我已经挖了好几个小时了,没办法弄明白 在C#中,是否有办法查询远程文件服务器(最好使用ManagementObjectSearcher,但不一定),并询问当前哪个用户锁定了文件 我能想出的最好办法就是 var en = new DirectoryEntry($@"\\{hostName}\root\cimv2"); var fso = s

**编辑:原来的问题不清楚。我在任何.Net程序集中都找不到IADsFileServiceOperations,这就是问题所在——并不是我不知道如何使用它**

我已经挖了好几个小时了,没办法弄明白

在C#中,是否有办法查询远程文件服务器(最好使用
ManagementObjectSearcher
,但不一定),并询问当前哪个用户锁定了文件

我能想出的最好办法就是

var en = new DirectoryEntry($@"\\{hostName}\root\cimv2");
var fso = sessQuery.NativeObject as IADsFileServiceOperations;
var resources = fso.Resources();
但就我的一生而言,我不知道如何在.Net项目中使用
IADsFileServiceOperations


帮助。。。?请…?

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

  • IADsFileServiceOperations::资源
  • IADsFileServiceOperations::会话
  • IADsFileServiceOperations::Resources方法获取指向 指向的集合上的IADsCollection接口的指针 表示此文件上当前打开的资源的资源对象 服务

    更新1:

    要将active directory类型添加到
    .NET
    项目中,需要向该项目添加COM引用。转到添加参考对话框,然后单击
    COM
    选项卡并添加
    活动DS类型库

    通过添加此
    COM
    引用,您可以使用
    ActiveDS
    获得所有
    AD
    类型和接口


    希望它能解决您的问题。

    这对您有帮助吗?谢谢@Roni,但显然我的问题措辞不当。我的意思是,我在任何.Net程序集中都找不到IADsFileServiceOperations,也不知道如何链接到它以使其在.Net应用程序中可用。谢谢阿里,但我的问题显然不清楚。我的问题不是我不知道如何使用IADsFileServiceOperations,而是我不知道如何在.NET中使用它-也就是说,我在任何.NET程序集中都找不到它…@user884248抱歉误解。我更新了答案,它解决了你的问题。阿里-你是最好的。非常感谢。
    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
       }
    }