【问题标题】:NetUseAdd returns error 67 or 87NetUseAdd 返回错误 67 或 87
【发布时间】:2018-04-22 04:45:38
【问题描述】:

我正在调用 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 秒,但最终会出现。

【问题讨论】:

  • 显示为UNCPath赋值的行
  • UNCPath = "\\\\servername\\somedir";
  • paramErrorIndex 的值是多少?当我有一个 \ 作为最后一个字符时,错误是 87 它在我的盒子上返回 2。如果我使用无效凭据,它会返回 67 你的 linux box 域加入了吗?我的 linux 服务器不是,所以我必须输入服务器名作为域。
  • 您说的是子文件夹。所以你是说@"\\server\dir" 有效,但@"\\server\dir\subdir" 无效?一个奇怪的想法,但你确实说 Linux ...@"\\server\dir/subdir" 之类的东西怎么样?
  • 这些是基本的低级错误代码。 67 = "网络名称错误,87 = "参数无效"。很有可能您正在解决这个问题,因为您的 pinvoke 声明不正确。我们看不到它们。

标签: c# winapi


【解决方案1】:

我不是这个主题的专家,但我使用的是类似的东西:

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

我收到错误代码 87, 然后我将字符串更改为

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

它奏效了。也许,它可能适用于其他人。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        在我改变它之后它起作用了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-05-24
          • 1970-01-01
          • 2017-07-22
          • 1970-01-01
          相关资源
          最近更新 更多