В коде моего приложения есть функция, которая подключается (через 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;
}
}
Код: Выделить всё
[ 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.
- Мой компьютер: Pro, v10.0.19045
- VM: Server 2019 Standard, v10.0.17763
- Устройство: Enterprise LTSC, v10.0.17763
Подробнее здесь: https://stackoverflow.com/questions/798 ... ip-address
Мобильная версия