我有一个ConsoleApp(不是asp.net)从目录中获取文件(该应用程序在Windows Server 2012上运行)。 该应用程序适用于本地目录甚至共享目录(例如" \\ MyShare \ dest")。但是,当我映射共享时(从" \\ MyShare到X :)我得到了
DirectoryNotFoundException。
我必须映射驱动器,因为某些文件超过了260个字母的限制。 此外,当我在我的电脑上调试我的应用程序时,我在访问映射驱动器时没有收到错误。
提前感谢您的任何帮助:)
P.S:我已经看过其他帖子,问题是应用程序没有以正确的用户权限运行。我的应用程序使用我的凭据运行,因此我的用户存在地图..
编辑:我在你的帮助下做了一些解决方法,并且它有效。我使用mklink
命令而不是创建映射的网络驱动器,它为我的共享创建了一个快捷方式:
mklink / D c:\ MyShortcut \\ MyShare
感谢大家的帮助
答案 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 = "";
}
答案 1 :(得分:0)
一种可能性是您的应用程序正在提升模式下运行(即,选择了Run as administrator
)。问题here进行了更详细的讨论。
解决方案是使用net use
来安装驱动器,mklink
或直接将其合并到注册表中:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"EnableLinkedConnections"=dword:00000001
进行上述更改后,需要重新启动。