Добавление подключенного диска с WNetAddConnection2 недоступно
Я пытаюсь подключить диск с помощью WNetAddCOnnection2
но есть что-то не совсем правильное. Код, который я использую от pinvoke.net и, кажется, сначала работает. Если я перехожу код, я получаю 0 за ответ, и я могу использовать System.IO.Directory.GetFiles()
осмотреть новый подключенный диск, который заставляет меня поверить, что учетные данные в порядке.
Проблема в том, что диск недоступен за пределами приложения. Когда я печатаю net use
из командной строки я вижу диск, указанный ниже:
Unavailable L: \\<server>\<share> Microsoft Windows Network
Когда я пытаюсь получить доступ к диску, я получаю либо:
The system cannot find the drive specified.
или же
The system cannot find the path specified.
Любая помощь будет принята с благодарностью.
Вот краткость кода, о котором идет речь:
NETRESOURCE res = new NETRESOURCE();
res.iScope = RESOURCE_GLOBALNET;
res.iType = RESOURCETYPE_DISK;
res.iDisplayType = RESOURCEDISPLAYTYPE_SHARE;
res.iUsage = RESOURCEUSAGE_CONNECTABLE;
res.sRemoteName = share;
res.sLocalName = drive;
res.sProvider = null;
int iFlags = 0;
iFlags = CONNECT_UPDATE_PROFILE;
int iResult = WNetAddConnection2( ref res, psPassword, psUsername, iFlags );
iResult
всегда заканчивается равным 0.
1 ответ
Статьи MSDN, которые могут помочь:
* WNetAddConnection2 - [http://msdn.microsoft.com/en-us/library/aa385413%28VS.85%29.aspx][1]
* NETRESOURCE - [http://msdn.microsoft.com/en-us/library/aa385353%28VS.85%29.aspx][2]
Я считаю, что ваша проблема заключается в типе отображения, где "res.iDisplayType = RESOURCEDISPLAYTYPE_SHARE". Возможно, попробуйте изменить значение на "0" (RESOURCEDISPLAYTYPE_GENERIC). Так, например, появляется то, что я обычно использую для сопоставления дисков:
С Res .dwScope = RES_SCOPE_GLOBALNET 'значение 2 .dwType = RES_TYPE_DISK 'значение 1 .dwUsage = RES_USE_CONNECT 'значение 1 .localName = "x:" 'оставьте пустым, если нет диска.RemoteName = "\\\" Конец с lRes = WNetAddConnection2(Res, sPassword, sDomain & "\" & sPassword, RES_CNN_UPDATE_PROFILE) Если lRes = 0, то "Успех еще 'Ошибка Конец, если
Всегда проверяйте соединения до и после звонков из командной строки:
1a) Из системы, устанавливающей соединение, перечислите текущие соединения:
чистое использование
1b) Из подключенной системы также перечислите текущие сеансы:
чистая сессия
Чтобы отключить сеанс, используйте API 'WNetCancelConnection2', мой код следующий сверху:
sServer = "\\\" lRes = WNetCancelConnection2 (sServer, RES_CNN_UPDATE_PROFILE, True) Если lRes `> 0, то "Успех еще 'Ошибка Конец, если
В качестве альтернативы просто создайте соединения с помощью команды net:
1) Чтобы отобразить букву диска:
net use `: \\` \ `/ user:` \ ``
2) Чтобы отобразить соединение IPC:
net use \\ `\` / user: `\` `
Отключение с помощью команды "net":
1) Отключение подключенного диска:
net use `: / delete
2) Отключение общего ресурса сервера:
net use \\ `\` / delete