我正在尝试使用WNetAddCOnnection2
映射一个驱动器但是有些东西不太合适。我从pinvoke.net使用的代码,似乎最初起作用。如果我逐步执行代码,我会得到一个0作为响应,我可以使用System.IO.Directory.GetFiles()
来检查新的映射驱动器,这使我相信凭据很好。
问题是驱动器在应用程序外部不可用。当我从命令提示符输入net use
时,我看到列出的驱动器如下:
Unavailable L: \\<server>\<share> Microsoft Windows Network
当我尝试访问驱动器时,我得到:
The system cannot find the drive specified.
或
The system cannot find the path specified.
非常感谢任何帮助。
以下是相关代码的简要说明:
NETRESOURCE res = new NETRESOURCE();
res.iScope = RESOURCE_GLOBALNET;
res.iType = RESOURCETYPE_DISK;
res.iDisplayType = RESOURCEDISPLAYTYPE_SHARE;
res.iUsage = RESOURCEUSAGE_CONNECTABLE;
res.sRemoteName = share;
res.sLocalName = drive;
res.sProvider = null;
int iFlags = 0;
iFlags = CONNECT_UPDATE_PROFILE;
int iResult = WNetAddConnection2( ref res, psPassword, psUsername, iFlags );
iResult
总是等于0。
答案 0 :(得分:1)
可能有帮助的MSDN文章:
* WNetAddConnection2 - [http://msdn.microsoft.com/en-us/library/aa385413%28VS.85%29.aspx] [1]
* NETRESOURCE - [http://msdn.microsoft.com/en-us/library/aa385353%28VS.85%29.aspx] [2]
我认为你的问题是“res.iDisplayType = RESOURCEDISPLAYTYPE_SHARE”的显示类型。也许尝试更改为值“0”(RESOURCEDISPLAYTYPE_GENERIC)。例如,我通常用于映射驱动器的内容出现:
With Res .dwScope = RES_SCOPE_GLOBALNET 'value 2 .dwType = RES_TYPE_DISK 'value of 1 .dwUsage = RES_USE_CONNECT 'value of 1 .localName = "x:" 'leave blank for no drive .RemoteName = "\\\" End With lRes = WNetAddConnection2(Res, sPassword, sDomain & "\" & sPassword, RES_CNN_UPDATE_PROFILE) If lRes = 0 Then 'Success Else 'Error End If
请务必先检查您的连接。从命令提示符调用后:
1a)从系统建立连接,列出当前连接:
net use
1b)从连接的系统中,列出当前会话:
net session
要断开会话,请使用API'WNetCancelConnection2',我的代码如下:
sServer = "\\\" lRes = WNetCancelConnection2(sServer, RES_CNN_UPDATE_PROFILE, True) If lRes `> 0 Then 'Success Else 'Error End If
或者,只需使用'net'命令进行连接:
1)映射驱动器号:
net use `: \\`\` /user:`\` `
2)映射IPC连接:
net use \\`\` /user:`\` `
使用'net'命令断开连接:
1)断开映射驱动器:
net use `: /delete
2)断开服务器共享:
net use \\`\` /delete