Добавление подключенного диска с 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
Другие вопросы по тегам