Почему я получаю сообщение об ошибке BAD_NET_NAME от WNetUseConnection с IP-адресом?C#

Место общения программистов C#
Ответить
Anonymous
 Почему я получаю сообщение об ошибке BAD_NET_NAME от WNetUseConnection с IP-адресом?

Сообщение Anonymous »

Контекст
В коде моего приложения есть функция, которая подключается (через WNetUseConnection) к общей папке Windows на указанных устройствах в сети, к которой подключен компьютер, на котором запущено приложение. Это предназначено для программной загрузки/создания резервных копий файлов на устройствах, но это не важно, поскольку у меня не получается на этапе «подключения». Я опишу проблему только с одним устройством, чтобы избежать путаницы.
Я прочитал документацию MS о том, как использовать WNetUseConnection и что означают ошибки. Лучше задать вопрос для моего заголовка: Что я делаю не так при использовании WNetUseConnection?
Изменить: Приложение запускается как служба. Препятствует ли это вводу-выводу файла за пределами его рабочего каталога?
Проблема и попытки ее устранения
Каждый раз, когда используется функция WNetUseConnection, я получаю сообщение ERROR_BAD_NET_NAME, выводимое на консоль. Хотя, насколько я могу судить, я все сделал правильно. Мой код для подключения представляет собой копию этого кода, и точный раздел выглядит так:

Код: Выделить всё

public string ConnectToShare(string uri, string username, string password)
{
var netResource = new NetResource()
{
Scope = ResourceScope.GlobalNetwork,
ResourceType = ResourceType.Disk,
DisplayType = ResourceDisplaytype.Share,
RemoteName = uri,
};
_networkName = uri;
_logger.LogWarning($"Attempting to connect to share with u/{username} p/{password} on uri: {_networkName}");
int ret = WNetUseConnection(IntPtr.Zero, netResource, password, username, 0, null, null, null);
if (ret == NO_ERROR)
return null;
else
{
var err = GetError(ret);
_logger.LogError($"Failed to connect to share: {err}");
return err;
}
}
а часть журнала, которую это ...logs... выглядит так:

Код: Выделить всё

[ WRN Application.DeviceMonitor.NetworkConnection] Attempting to connect to share with u/.\user p/password on uri: \\10.0.0.143
  • Сам путь представляет собой стандартный IPv4-адрес, и мне известны детали подключения (см. выше). Я пробовал различные конфигурации URI и имени пользователя (без/без обратной косой черты и точки) и пытался включить основной диск, доступ к которому осуществляется из общего ресурса (

    Код: Выделить всё

    \\10.0.0.143\d
    ).
  • Я пробовал другие значения Enum для параметров Scope, ResourceType и DisplayType, если они были неправильными, но безуспешно.
  • Я могу подключиться к этому файловому ресурсу вручную, через проводник Windows, а также командную строку и PowerShell, используя вышеупомянутые детали и соответствующие команды net. Я могу сделать это как со своего ПК для разработки, так и с виртуальной машины, на которой работает приложение.
  • Брандмауэр открыт, и устройство взаимодействует с приложением другими способами (в основном командами API).
  • Включение/отключение NTLM так или иначе не оказывает никакого эффекта1.
  • Групповая политика не имеет эффект1.
Единственная другая потенциально значимая информация, о которой я могу думать, это то, что и на виртуальной машине, и на устройстве работают следующие пакеты Windows 10:
  • Мой компьютер: Pro, v10.0.19045
  • VM: Server 2019 Standard, v10.0.17763
  • Устройство: Enterprise LTSC, v10.0.17763
1 Эти вещи были опробованы после прочтения этого призыва о помощи.

Подробнее здесь: https://stackoverflow.com/questions/798 ... ip-address
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»