为什么枚举Win32_Shares为“LOCAL SERVICE”用户返回null属性?

时间:2011-03-22 12:53:26

标签: c# .net network-share

我有以下代码:

  var searcher = new ManagementObjectSearcher("SELECT Name, Path FROM Win32_share");
  ManagementObjectCollection coll = searcher.Get();

  foreach (var share in coll)
  {
      Console.WriteLine("share-path: " + share["Path"] + " share-name:" + share["Name"]);
  }

以我的身份运行,我得到合理的输出:

share-path: C:\Windows share-name:ADMIN$
share-path: C:\ share-name:C$
share-path: D:\ share-name:D
share-path: D:\ share-name:D$
share-path:  share-name:IPC$

作为本地系统用户从服务运行它,我没有Path属性:

share-path: share-name:ADMIN$
share-path: share-name:C$
share-path: share-name:D
share-path: share-name:D$
share-path: share-name:IPC$

LOCAL SERVICE是否无法查看共享文件夹路径?我究竟做错了什么? (注意:我也尝试以“NETWORK SERVICE”运行,结果相同。

2 个答案:

答案 0 :(得分:1)

我尝试使用WinApi NetShareEnum并收到了相同的结果。有趣的是,此代码在Windows 2008 R2上运行正常,并且在Windows 2008上不起作用。我没有尝试过早期的平台。

这似乎是权限问题,因为本地SYSTEM帐户可以访问共享路径。无休止的测试和使用本地安全设置并没有带来任何结果。我使用regmon或filemon找不到任何可疑活动。我最终将我的应用程序切换到SYSTEM帐户。

答案 1 :(得分:1)

LOCAL SERVICE无权使用网络共享。您需要以具有适当权限的用户身份运行您的服务,很可能是具有共享权限的域用户。