3

我正在调用 NetApi32.dll 方法NetUseAdd
这是如何:

USE_INFO_2 useinfo = new USE_INFO_2();

useinfo.ui2_remote = UNCPath;
useinfo.ui2_username = User;
useinfo.ui2_domainname = Domain;
useinfo.ui2_password = Password;
useinfo.ui2_asg_type = 0;
useinfo.ui2_usecount = 1;
uint paramErrorIndex;
returncode = NetUseAdd(null, 2, ref useinfo, out paramErrorIndex);

当用useinfo.ui2_remote = \\servername\dirname它调用它时返回代码 67,当用useinfo.ui2_remote = \\servername\dirname\它调用时返回代码 87。

当我说它返回代码时......我的意思是它要么抛出异常并Marshal.GetLastWin32Error()返回此错误代码,要么实际调用NetUseAdd返回它。

奇怪的是,当使用没有配音文件夹的路径调用此方法时,此方法成功,而在使用具有子文件夹 的路径调用时失败。

调用机器是 Windows server 2008,远程是 linux 服务器(我不确定是什么版本或发行版)。

知道如何成功连接\使用远程资源而不必担心子文件夹问题吗?

编辑

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
internal struct USE_INFO_2
{
     internal LPWSTR ui2_local;
     internal LPWSTR ui2_remote;
     internal LPWSTR ui2_password;
     internal DWORD ui2_status;
     internal DWORD ui2_asg_type;
     internal DWORD ui2_refcount;
     internal DWORD ui2_usecount;
     internal LPWSTR ui2_username;
     internal LPWSTR ui2_domainname;
}

[DllImport("NetApi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
internal static extern NET_API_STATUS NetUseAdd(
     LPWSTR UncServerName,
     DWORD Level,
     ref USE_INFO_2 Buf,
     out DWORD ParmError);

值得一提的更多信息:我尝试使用 NetUseAdd 添加的远程路径是一个巨大的存储空间(7 TB)。使用 Windows 资源管理器进行简单访问大约需要 3-4 秒才能到达,但最终会出现。

4

4 回答 4

6

I am not am expert on this topic but I was using something like:

@"\\10.22.15.14\C$\Inetpub\wwwroot\db\archive\"

and I got a error code 87, then I changed the string to be

@"\\10.22.15.14\C$\Inetpub\wwwroot\db\archive"

and it worked. perhaps, it may work for somebody else.

于 2015-01-05T21:57:07.017 回答
1

我遇到了同样的问题并设法找出了罪魁祸首 - 如果使用原始文章中的源代码,我注意到它只允许我在不以管理员身份运行 Visual Studio 时进行连接(我的默认设置)。希望这可以帮助其他对此感到沮丧的人!

于 2015-09-06T22:21:50.027 回答
0

我在连接到 Linux 服务器时遇到了类似的问题。对我有用的解决方案是首先使用登录凭据从 Windows 手动映射网络驱动器,这必须创建一些内部配置,然后允许使用 NetUseAdd 进行连接。我只需要映射驱动器一次。

于 2016-10-05T13:46:09.850 回答
0

我发现文件夹路径是区分大小写的,因为路径中不应有尾随反斜杠,如前所述。

在我改变它之后它工作了。

于 2018-04-21T20:45:38.197 回答