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;
}
////