我有以下代码:
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”运行,结果相同。
答案 0 :(得分:1)
我尝试使用WinApi NetShareEnum并收到了相同的结果。有趣的是,此代码在Windows 2008 R2上运行正常,并且在Windows 2008上不起作用。我没有尝试过早期的平台。
这似乎是权限问题,因为本地SYSTEM帐户可以访问共享路径。无休止的测试和使用本地安全设置并没有带来任何结果。我使用regmon或filemon找不到任何可疑活动。我最终将我的应用程序切换到SYSTEM帐户。
答案 1 :(得分:1)
LOCAL SERVICE无权使用网络共享。您需要以具有适当权限的用户身份运行您的服务,很可能是具有共享权限的域用户。