重新连接断开的网络驱动器

时间:2009-11-27 11:33:28

标签: c# .net windows

如果我尝试将文件写入网络驱动器,即断开连接,我会收到错误。

如果我在资源管理器中双击该驱动器,则重新连接网络驱动器。

使用System.Io.Driveinfo.IsReady我可以检查驱动器是否准备就绪 - 但是如何在代码中重新连接?

2 个答案:

答案 0 :(得分:5)

这个code会显示如何映射驱动器并在运行时动态取消映射吗?这是在CodeGuru上。

答案 1 :(得分:0)

@AndresRohrAtlasInformatik指出,已接受的解决方案不适用于Windows Vista及更高版本。

所以我的解决方案是“简单地”将探索器作为隐藏窗口启动,转到网络驱动器并关闭资源管理器。后者有点困难(参见here)因为资源管理器对多个窗口有非常特殊的行为。

ProcessStartInfo info = new ProcessStartInfo("explorer.exe", myDriveLetter);
info.WindowStyle = ProcessWindowStyle.Hidden;
Process process = new Process();
process.StartInfo = info;
process.Start();
Thread.Sleep(1000);
//bool res = process.CloseMainWindow(); // doesn't work for explorer !!
//process.Close();
//process.WaitForExit(5000);

// https://stackoverflow.com/a/47574704/2925238
ShellWindows _shellWindows = new SHDocVw.ShellWindows();
string processType;

foreach (InternetExplorer ie in _shellWindows)
{
    //this parses the name of the process
    processType = System.IO.Path.GetFileNameWithoutExtension(ie.FullName).ToLower();

    //this could also be used for IE windows with processType of "iexplore"
    if (processType.Equals("explorer") && ie.LocationURL.Contains(myDriveLetter))
    {
        ie.Quit();
    }
}