首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何迫使Windows重新连接到网络驱动器

如何迫使Windows重新连接到网络驱动器
EN

Stack Overflow用户
提问于 2011-12-25 13:18:46
回答 3查看 9.8K关注 0票数 11

我们尝试访问网络目录中的一个目录,但得到错误的结果(C#/Windows):

代码语言:javascript
复制
var exists = Directory.Exists("Z:\\Sessions\\Data1");

"Z“是网络目录,”会话“是记录软件不断创建目录的目录。( "Data1")并将一些数据放入其中。Windows似乎缓存了有关Data1的错误状态:该方法返回false。但是当我通过资源管理器访问目录时,它就在这里。当我使用资源管理器访问目录后运行该方法(Directory.Exists)时,它将返回true。当然,我可以保证该目录在第一次尝试时确实存在。

这种行为的原因是什么?我能做些什么?

编辑:,似乎windows无法将网络驱动器连接到远程计算机。当我尝试使用资源管理器导航到目录时,它会自动尝试连接驱动器。

所以问题变了:是否有办法强迫窗口通过.NET重新连接?

解决方案: 重新连接断开的网络驱动器

EN

回答 3

Stack Overflow用户

发布于 2014-06-24 18:57:12

我不确定上面的解决方案链接使用哪个版本的mpr.dll,但我使用的是Win7,并且有一个稍微不同的版本(尽管类似)。这一切入点是:

代码语言:javascript
复制
    [DllImport("mpr.dll", SetLastError = true, EntryPoint = "WNetRestoreSingleConnectionW", CharSet = CharSet.Unicode)]
    internal static extern int WNetRestoreSingleConnection( IntPtr windowHandle,
                                                            [MarshalAs(UnmanagedType.LPWStr)] string localDrive,
                                                            [MarshalAs(UnmanagedType.Bool)] bool useUI);

然后:

代码语言:javascript
复制
IntPtr hWnd = new IntPtr(0);
int res = WNetRestoreSingleConnection(hWnd, <your drive path>, false);

您必须添加自己的错误检查/处理。

票数 6
EN

Stack Overflow用户

发布于 2014-02-06 20:40:26

我也使用一个远程驱动器,它需要几秒钟的连接,所以我只是等待和工作每次。如果它不连接,它会发送一封电子邮件,我会检查它。

代码语言:javascript
复制
        logger.Info("Create Z: drive ");
        System.Diagnostics.Process process = new System.Diagnostics.Process();
        System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
        startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
        startInfo.FileName = "cmd.exe";
        startInfo.Arguments = @"/C net use z: \\" + Tools.servername + @"\SHARE_NAME_HERE /user:USER_NAME_HERE PASSWORD_HERE";
        process.StartInfo = startInfo;
        process.Start();
        logger.Info("Z: drive created ");

        // wait get Z:
        int xtimestimeout = 5;
        while (!Directory.Exists(@"Z:\") & (xtimestimeout > 0))
        {
            Application.DoEvents();
            SetBalloonTip(@"Program", @"connecting... please wait");
            ShowBalloon();
            logger.Info("Creating Z:... waiting...");
            Application.DoEvents();
            System.Threading.Thread.Sleep(3000);
            xtimestimeout -= 1;
        }

        // check for sucessfull creation of Z: in server Z:\somedirectory
        if (!Directory.Exists(@"Z:\"))
        {
            SendEmail2("Oh my... help!", "drive Z: not created <<< CHECK!");
            logger.Info("Z: email sent because of not created");
        }
        logger.Info("Z: drive created successfully.");
票数 2
EN

Stack Overflow用户

发布于 2011-12-25 13:25:16

这种行为的原因是什么?

来自文档的报价

如果您对目录没有最低限度的只读权限,则现有方法将返回false。

我能做些什么?

确保您在至少具有访问此文件夹的只读权限的帐户下运行.NET应用程序。请注意,如果您在ASP.NET应用程序中编写此应用程序,情况可能不是这样,因此,根据您配置web服务器以执行应用程序的帐户,请采取必要步骤向该帐户授予权限。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8629760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档