使用 WNetUseConnection 连接到网络驱动器

Using WNetUseConnection to connect to a network drive

我正在使用 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,这没有意义,因为我的电脑仍在显示驱动器,但是当我尝试双击驱动器,它向我显示驱动器不存在的错误。

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

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

net use * /del /yes

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

谁能告诉我为什么会这样?感谢您的帮助。

编辑:

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

PS:我用的是windows10版本1709

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

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