C# 服务器共享可以在Windows文件资源管理器中列出,但net view\\MyServerName返回错误53
我正在努力寻找在远程服务器上获取共享列表的方法。该服务器是一个基于Linux的视频服务器,在更改设置等方面,我无法访问它。 我的问题是,在本地计算机上启动服务器客户端管理器软件后,只需输入\\MyServerName作为路径,就可以在普通的文件资源管理器窗口中列出所有共享 但所有试图通过net view或C#DirectoryInfo(..)访问共享列表的人都返回错误53。 我尝试了在网上找到的所有想法:C# 服务器共享可以在Windows文件资源管理器中列出,但net view\\MyServerName返回错误53,c#,windows,network-share,C#,Windows,Network Share,我正在努力寻找在远程服务器上获取共享列表的方法。该服务器是一个基于Linux的视频服务器,在更改设置等方面,我无法访问它。 我的问题是,在本地计算机上启动服务器客户端管理器软件后,只需输入\\MyServerName作为路径,就可以在普通的文件资源管理器窗口中列出所有共享 但所有试图通过net view或C#DirectoryInfo(..)访问共享列表的人都返回错误53。 我尝试了在网上找到的所有想法: 在本地计算机用户帐户vault中添加登录名 net use\\MyServerName/u
net use\\MyServerName/user:MyID MyPassword
var d = new DirectoryInfo(@"\\MyServerName\OneOfTheShares");
我知道DirectoryInfo不能只使用服务器名。它需要一个文件夹。但我不明白的是,为什么文件资源管理器可以列出共享,而net view\\MyServerName
不能
谁能帮我想一想吗?好吧,被安东·安皮洛戈夫戏弄了;-)为了对这个问题进行WinApi分析,我找到了Rob Manderson的一个有16年历史的代码项目 这让我走上了正确的道路:-) 通过使用WNetEnumResource枚举连接的服务器资源,并使用已知的服务器名称对其进行筛选,我可以返回该服务器上所有共享的列表
result = WNetOpenEnum(scope, type, usage, pRsrc, out handle);
if (result == ErrorCodes.NO_ERROR)
{
do
{
result = WNetEnumResource(handle, ref cEntries, buffer, ref bufferSize);
if (result == ErrorCodes.NO_ERROR)
{
Marshal.PtrToStructure(buffer, pRsrc);
if(pRsrc.lpRemoteName.StartsWith(<MyServerName>))
{
Shares.Add(pRsrc.lpRemoteName);
}
}
else if (result != ErrorCodes.ERROR_NO_MORE_ITEMS)
break;
} while (result != ErrorCodes.ERROR_NO_MORE_ITEMS);
WNetCloseEnum(handle);
result=WNetOpenEnum(范围、类型、用法、pRsrc、输出句柄);
如果(结果==错误代码。无错误)
{
做
{
结果=WNetEnumResource(句柄、引用中心、缓冲区、引用缓冲区大小);
如果(结果==错误代码。无错误)
{
结构(缓冲区,pRsrc);
if(pRsrc.lpRemoteName.StartsWith())
{
Shares.Add(pRsrc.lpRemoteName);
}
}
else if(结果!=错误代码。错误\u无\u更多项目)
打破
}while(结果!=ErrorCodes.ERROR\u NO\u MORE\u ITEMS);
WNetCloseEnum(句柄);
}
代码显然需要一些整理,但它是有效的!
塔克斯 Samba共享不仅可以包含文件夹,还可以包含打印机等。。。所以不能使用DirectoryInfo列出它。我考虑使用WiAPI获取股票的列表。