0

我正在尝试使用映射驱动器,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 。

4

1 回答 1

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)。因此,例如,我通常用来映射驱动器的内容出现:


有水库  
  .dwScope = RES_SCOPE_GLOBALNET '值 2  
  .dwType = RES_TYPE_DISK '值为 1  
  .dwUsage = RES_USE_CONNECT '值为 1  
  .localName = "x:" '留空表示没有驱动器   
  .RemoteName = "\\\"  
结束于
lRes = WNetAddConnection2(Res, sPassword, sDomain & "\" & sPassword, RES_CNN_UPDATE_PROFILE)
如果 lRes = 0 那么
  '成功
别的   
  '错误
万一

在命令提示符调用之前和之后始终检查您的连接:

1a) 从系统建立连接,列出当前连接:

   净使用

1b)从连接的系统中,列出当前会话:

   净会话

要断开会话,请使用 API 'WNetCancelConnection2',我的代码如下:


sServer = "\\\"
lRes = WNetCancelConnection2(sServer, RES_CNN_UPDATE_PROFILE, True)
如果 lRes `> 0 则
  '成功
别的
  '错误
万一

或者,只需使用“net”命令进行连接:

1)映射驱动器号:

  净使用 `: \\`\` /user:`\` `

2) 映射 IPC 连接:

  网络使用 \\`\` /user:`\` `

使用“net”命令断开连接:

1)断开映射驱动器:

  净使用`:/删除

2)断开服务器共享:

  净使用\\`\` /删除
于 2010-11-12T00:57:42.237 回答