WNetAddConnection2 возвращает 1219

Я использую WNetAddConnection2 и WNetCancelConnection2 для сопоставления или отмены сопоставления дисков.

Я пытаюсь сделать следующее:
Я сопоставил папку (например, Folder1) на сервере (например, myserver). поэтому путь \\myserver\Folder1 и я сопоставляю его с диском X.
Теперь я хочу сопоставить другую папку (например, Folder2) на том же сервере, чтобы управлять Y программно.

Когда я вызываю метод WNetAddConnection2 после сопоставления одной папки, он возвращает 1219 вместо 0, и я получаю ошибку: несколько подключений к серверу или общему ресурсу одним и тем же пользователем, используя более одного имени пользователя, не допускаются. Отключите все предыдущие подключения к серверу или общему ресурсу и повторите попытку.

Я в замешательстве, потому что я могу сопоставить Folder2 на том же сервере, щелкнув правой кнопкой мыши на MyComputer и выбрав карту сетевого диска..., но не программно.

Я что-то упустил или мне нужно использовать структуру NETRESOURCE по-другому или что-нибудь еще?

Спасибо

3 ответа

Вы также программируете X: программно? Если да, то используете ли вы те же спецификации имени пользователя и пароля в вызовах WNetAddConnection2()? Ошибка 1219 будет означать, что вы пытаетесь сопоставить несколько дисков одному серверу, используя разные аутентификации. Я успешно сделал несколько WNetAddConnection2 () для нескольких общих ресурсов на одном сервере при использовании одной комбинации пользователь / проход.

В случае, если у кого-то еще есть эта проблема, я случайно открыл общий файловый ресурс в окне проводника, не осознавая этого. Я закрыл окно, а затем код работал нормально.

Очень поздний ответ, но надежда может помочь. Мой способ сделать - вызвать команду net delete в C #.

////

      string strParam = @"/c net use * /delete /Y";
string strOutput = MappedDriveResolver.DoProcess("cmd", strParam);

public static string DoProcess(string cmd, string argv)
  {
      Process p = new Process();
      p.StartInfo.UseShellExecute = false;
      p.StartInfo.RedirectStandardOutput = true;
      p.StartInfo.FileName = cmd;
      p.StartInfo.Arguments = argv;
      p.StartInfo.CreateNoWindow = true;
      p.Start();
      p.WaitForExit();
      string output = p.StandardOutput.ReadToEnd();
      p.Dispose();
      return output;
      }

////

Другие вопросы по тегам