2

我正在使用 WNetUseConnection 连接到网络驱动器,昨天一切正常,下面是我用来连接到网络驱动器的代码。

NETRESOURCE nr = new NETRESOURCE();
nr.dwType = RESOURCETYPE_DISK;
nr.lpRemoteName = remote;
nr.lpLocalName = "L:";
int ret = WNetUseConnection(IntPtr.Zero, nr, username, password, 0, null, null, null);

我使用以下代码找到远程的值

WNetGetConnection("L:", sb, ref size);          
var remote= sb.ToString();

我使用下面的代码取消连接

WNetCancelConnection2("L:", 0, false); 

正如我之前提到的,昨天一切正常,但今天当我尝试重新测试代码时它失败了。WNetGetConnection 在某些情况下返回错误 1201,在其他情况下返回 1202(请注意,驱动器显示 x 符号,表示已断开连接)

在此处输入图像描述

现在尝试使用 WNetUseConnection 重新连接到驱动器,并且有效凭据失败并出现错误 1219,这真的很奇怪,因为没有与驱动器建立连接,同时尝试通过传递空的用户名和密码连接到驱动器工作正常。

使用 WNetCancelConnection2 取消连接有效,连接成功取消,但尝试再次执行 WNetUseConnection 以重新测试步骤会引发此错误 67,这没有意义,因为我的电脑仍在显示驱动器,但是当我尝试双击时驱动器它向我显示驱动器不存在的错误。

断开驱动器将不起作用,但将驱动器重新映射到具有相同驱动器号的相同位置并替换网络驱动器。但重新映射并没有解决问题。

当我使用以下命令删除并重新创建驱动器时,一切再次正常。

净使用 * /del /是

net use l: "NetworkPath" /user:"username" "password"

谁能告诉我为什么会这样?我很感激帮助。

编辑:

现在问题开始更频繁地出现,我无法使用代码连接到驱动器,但是当我双击计算机上的驱动器图标时,连接已成功创建。命令不再解决问题。

PS:我使用的是 windows 10 版本 1709

4

1 回答 1

0

使用该库一段时间后,我发现在连接和断开连接之间添加延迟可以防止发生此问题,并且在某些情况下,如果运行 WNetUseConnection 的用户的网络连接损坏,则错误将继续显示并覆盖他的权限将解决此问题问题。

不确定这是否是正确的解决方案,但至少这些是我使用并证明有效的解决方法。

于 2018-05-06T06:02:32.470 回答