无法访问映射的网络驱动器

时间:2017-08-23 14:34:56

标签: c# console-application network-drive

我有一个ConsoleApp(不是asp.net)从目录中获取文件(该应用程序在Windows Server 2012上运行)。 该应用程序适用于本地目录甚至共享目录(例如" \\ MyShare \ dest")。但是,当我映射共享时(从" \\ MyShare到X :)我得到了

  

DirectoryNotFoundException。

我必须映射驱动器,因为某些文件超过了260个字母的限制。 此外,当我在我的电脑上调试我的应用程序时,我在访问映射驱动器时没有收到错误。

提前感谢您的任何帮助:)

P.S:我已经看过其他帖子,问题是应用程序没有以正确的用户权限运行。我的应用程序使用我的凭据运行,因此我的用户存在地图..

编辑:我在你的帮助下做了一些解决方法,并且它有效。我使用mklink命令而不是创建映射的网络驱动器,它为我的共享创建了一个快捷方式:

  

mklink / D c:\ MyShortcut \\ MyShare

感谢大家的帮助

2 个答案:

答案 0 :(得分:0)

如果我正确理解了问题和注释,则无法访问映射的驱动器,因为应用程序看不到映射。根据我的理解,可以使用平台调用以编程方式连接到共享,更准确地说是以下两个函数和结构。

[DllImport("Mpr.dll")] static extern int WNetUseConnection(
    IntPtr hwndOwner,
    NETRESOURCE lpNetResource,
    string lpPassword,
    string lpUserID,
    int dwFlags,
    string lpAccessName,
    string lpBufferSize,
    string lpResult
);

[DllImport("Mpr.dll")] static extern int WNetCancelConnection2(
    string lpName,
    int dwFlags,
    bool fForce
);

[StructLayout(LayoutKind.Sequential)] class NETRESOURCE
{ 
    public int dwScope = 0;
    public int dwType = 0;
    public int dwDisplayType = 0;
    public int dwUsage = 0;
    public string lpLocalName = "";
    public string lpRemoteName = "";
    public string lpComment = "";
    public string lpProvider = "";
}

记录的功能是herehere; thisthis问题可能相关。

答案 1 :(得分:0)

一种可能性是您的应用程序正在提升模式下运行(即,选择了Run as administrator)。问题here进行了更详细的讨论。

解决方案是使用net use来安装驱动器,mklink或直接将其合并到注册表中:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"EnableLinkedConnections"=dword:00000001

进行上述更改后,需要重新启动。