有时,由于“断开连接”而已经映射到驱动器号的网络驱动器。使用正常的 Windows 功能访问该驱动器上的文件/文件夹失败。只要用户手动单击该驱动器,它就会出现 Windows 资源管理器对话框,它就被神奇地修复了。
由于我的程序是一个批处理程序,我想从我的程序(C++)中启动这个“魔法”,但我还没有找到一个 Windows 函数。通常的 WNet... 功能中没有任何内容...
有时,由于“断开连接”而已经映射到驱动器号的网络驱动器。使用正常的 Windows 功能访问该驱动器上的文件/文件夹失败。只要用户手动单击该驱动器,它就会出现 Windows 资源管理器对话框,它就被神奇地修复了。
由于我的程序是一个批处理程序,我想从我的程序(C++)中启动这个“魔法”,但我还没有找到一个 Windows 函数。通常的 WNet... 功能中没有任何内容...
插入路径后,您可以检查它是否是网络资源,在打开文件之前,使用WNetGetConnection()获取网络资源。
您也可以尝试使用WNetRestoreConnectionW(),它似乎有更多的虚假支持,具体取决于环境。
NET USE V: /DELETE
NET USE V: "\\server1\videos"
NET USE L: /DELETE
NET USE L: "\\server2\archive"
我同意上面 CMB 的评论。我过去一直走这条路(请原谅双关语),这给我带来了无穷无尽的麻烦。
如果路径是用户可配置的,他们可以使用 m:\pathonserver 或者他们可以使用 \server\c\pathonserver。
它不应该对您的代码产生任何影响,以 m:\blahdeblah.dat 或 \server\c\blahdeblah.dat 的形式打开文件将是相同的。
使用 UNC 路径要可靠得多,无论映射的字母是否存在,Windows 都会自动重新连接到该路径。
这不是 WNetAddConnection 和 WNetAddConnection2 的用途吗?
不久前,我在我的一个客户那里遇到了麻烦。我不知道您的情况是否可行,但我们的解决方法是调整服务器的网络设置以停止超时和断开连接。有关详细信息,请参阅MSKB 297684。
不过,我怀疑这确实是一回事。Explorer 可能会在注册表中的某处缓存连接信息。当用户尝试访问该驱动器时,资源管理器发现映射已断开连接,从注册表中读取连接信息,然后重新创建连接。也许您可以在创建驱动器映射时尝试运行 regmon,看看是否可以确定连接信息的缓存位置和方式。
尝试通过以下方式重新连接到共享net use
:
net use \\server\folder [/user:[domain\]username] [password]
如果这不起作用,您可以net use /delete
先连接,然后重新连接。
如果您将驱动器映射到网络共享,则映射的驱动器可能会在定期不活动后断开连接,并且 Windows 资源管理器可能会在映射驱动器的图标上显示一个红色的“X”。但是,如果您尝试访问或浏览映射的驱动器,它会很快重新连接。
要避免这种行为,请使用以下命令:
net config server /autodisconnect:-1
微软对此主题的解释:https:
//support.microsoft.com/da-dk/help/297684/mapped-drive-connection-to-network-share-may-be-lost