0

我有以下代码:

  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$

本地服务是否应该无法查看共享文件夹路径?我究竟做错了什么?(注意:我也尝试以“网络服务”的身份运行,结果相同。

4

2 回答 2

1

我尝试使用 WinApi NetShareEnum 并收到相同的结果。值得注意的是,这段代码在 Windows 2008 R2 上运行正常,但在 Windows 2008 上不起作用。我没有尝试过早期的平台。

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

于 2011-04-22T19:07:59.147 回答
1

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

于 2011-04-22T19:10:30.837 回答