无法访问使用WNetAddConnection2添加映射驱动器

时间:2009-11-09 19:49:54

标签: network-programming drive-mapping

我正在尝试使用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。

1 个答案:

答案 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