Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

Microsoft WNet праблем   Найти похожие ветки 

 
alt7   (2004-03-15 11:20) [0]

Пишу в Делфях 6.

Задача состоит в том, чтоб по локальной сети подключиться к компьютеру и утянуть файлы с расшаренного диска. Беда в том что, один раз это работает (подключение, MoveFileEx, отключение), а на следующий раз вылетает ошибка: ERROR_SESSION_CREDENTIAL_CONFLICT.

Итак:
..
GetDriveType(PChar(NetDL[i]+":\")); // здесь определяем какая свободна буква на локальном компе
..
(1)
// Это у нас подключение
NetResource.dwType := RESOURCETYPE_DISK;
NetResource.lpLocalName  := PChar(NetDrive_Letter+":");
NetResource.lpRemoteName := PChar(_NetPath);
NetResource.lpProvider   := "";
DW_Res := WNetAddConnection2(NetResource,
                                PChar(_Password), {Password (if needed) or empty}
                                PChar(_Login), {User name (if needed) or empty}
                                CONNECT_UPDATE_PROFILE);
// Обработка различных ошибок
case DW_Res of
..
MoveFileEx
..
// Отключение
DW_Res := WNetCancelConnection2(PChar(NetDrive_Letter+":"),0,TRUE);
// Обработка различных ошибок
case DW_Res of

Один раз работает на ура, на второй раз в addconnection2 возникает ошибка ERROR_SESSION_CREDENTIAL_CONFLICT, то есть, как я думаю, Винда запомнила то мое подключение, и хотя я и делал CancelConnection (результат ее 0 - нет ошибки).

Пробовал перед (1) вставить перебор подключенных устройств и потом отключить, то что Винда запомнила:

   DW_Res :=  WNetOpenEnum(RESOURCE_REMEMBERED,
                           RESOURCETYPE_ANY,
                           0,
                           nil,
                           hEnum);

 repeat
   lpnrDrv  := PNETRESOURCE(GlobalAlloc(GPTR, cbBuffer));
   DW_Res := WNetEnumResource(hEnum, cEntries, lpnrDrv, cbBuffer);
   if (DW_Res = NO_ERROR) then
   begin
      for i := 0 to cEntries - 1 do
     begin
       if lpnrDrv^.lpLocalName <> nil then
          // Тут я хотел отключить сетевой диск по букве (типа Z:)
          DW_Res := WNetCancelConnection2(PChar(NetDrive_Letter+":"),0,TRUE);
          case DW_Res of
            // Обработка ошибок
            ..
            ERROR_NOT_CONNECTED: MessageDlg("Некоторый текст",mtError,[mbOK],0);
          end;
         s := s + lpnrDrv^.lpLocalName + #9 + lpnrDrv^.lpRemoteName;
       Inc(lpnrDrv);
     end;
   end
   else if DW_Res <> ERROR_NO_MORE_ITEMS then
   begin
     s := s + "Cannot complete network drive enumeration";
     GlobalFree(HGLOBAL(lpnrDrv));
     break;
   end;
   GlobalFree(HGLOBAL(lpnrDrv));
 until (DW_Res = ERROR_NO_MORE_ITEMS);
 WNetCloseEnum(hEnum);
 if s = "" then s := "No network connections.";

Вот. Но возникает ошибка с сообщением ERROR_NOT_CONNECTED. То есть мне говорят, что такого подключения нет, и отключать нечего.

Вопрос: как мне с этим справиться? Что тут у меня не так, или как иначе сделать мне, чтоб я мог нормально подключаться-переносить файлы-отключаться?

Thx заранее


 
alt7   (2004-03-15 11:20) [0]

Пишу в Делфях 6.

Задача состоит в том, чтоб по локальной сети подключиться к компьютеру и утянуть файлы с расшаренного диска. Беда в том что, один раз это работает (подключение, MoveFileEx, отключение), а на следующий раз вылетает ошибка: ERROR_SESSION_CREDENTIAL_CONFLICT.

Итак:
..
GetDriveType(PChar(NetDL[i]+":\")); // здесь определяем какая свободна буква на локальном компе
..
(1)
// Это у нас подключение
NetResource.dwType := RESOURCETYPE_DISK;
NetResource.lpLocalName  := PChar(NetDrive_Letter+":");
NetResource.lpRemoteName := PChar(_NetPath);
NetResource.lpProvider   := "";
DW_Res := WNetAddConnection2(NetResource,
                                PChar(_Password), {Password (if needed) or empty}
                                PChar(_Login), {User name (if needed) or empty}
                                CONNECT_UPDATE_PROFILE);
// Обработка различных ошибок
case DW_Res of
..
MoveFileEx
..
// Отключение
DW_Res := WNetCancelConnection2(PChar(NetDrive_Letter+":"),0,TRUE);
// Обработка различных ошибок
case DW_Res of

Один раз работает на ура, на второй раз в addconnection2 возникает ошибка ERROR_SESSION_CREDENTIAL_CONFLICT, то есть, как я думаю, Винда запомнила то мое подключение, и хотя я и делал CancelConnection (результат ее 0 - нет ошибки).

Пробовал перед (1) вставить перебор подключенных устройств и потом отключить, то что Винда запомнила:

   DW_Res :=  WNetOpenEnum(RESOURCE_REMEMBERED,
                           RESOURCETYPE_ANY,
                           0,
                           nil,
                           hEnum);

 repeat
   lpnrDrv  := PNETRESOURCE(GlobalAlloc(GPTR, cbBuffer));
   DW_Res := WNetEnumResource(hEnum, cEntries, lpnrDrv, cbBuffer);
   if (DW_Res = NO_ERROR) then
   begin
      for i := 0 to cEntries - 1 do
     begin
       if lpnrDrv^.lpLocalName <> nil then
          // Тут я хотел отключить сетевой диск по букве (типа Z:)
          DW_Res := WNetCancelConnection2(PChar(NetDrive_Letter+":"),0,TRUE);
          case DW_Res of
            // Обработка ошибок
            ..
            ERROR_NOT_CONNECTED: MessageDlg("Некоторый текст",mtError,[mbOK],0);
          end;
         s := s + lpnrDrv^.lpLocalName + #9 + lpnrDrv^.lpRemoteName;
       Inc(lpnrDrv);
     end;
   end
   else if DW_Res <> ERROR_NO_MORE_ITEMS then
   begin
     s := s + "Cannot complete network drive enumeration";
     GlobalFree(HGLOBAL(lpnrDrv));
     break;
   end;
   GlobalFree(HGLOBAL(lpnrDrv));
 until (DW_Res = ERROR_NO_MORE_ITEMS);
 WNetCloseEnum(hEnum);
 if s = "" then s := "No network connections.";

Вот. Но возникает ошибка с сообщением ERROR_NOT_CONNECTED. То есть мне говорят, что такого подключения нет, и отключать нечего.

Вопрос: как мне с этим справиться? Что тут у меня не так, или как иначе сделать мне, чтоб я мог нормально подключаться-переносить файлы-отключаться?

Thx заранее


 
Vlad Oshin ©   (2004-03-15 11:57) [1]

а просто написать путь \\сервер\диск\папка\файл ?


 
Vlad Oshin ©   (2004-03-15 11:57) [1]

а просто написать путь \\сервер\диск\папка\файл ?


 
alt7   (2004-03-15 12:10) [2]

Пробовал я, не пускает... (расширивал каталоги на пользователя под которым лезу тудысь)...
Не помню, какая ошибка вылетает, но вылетает ;)
Да и причем здесь это?

Но тут вся работа застопорилась, потому что, еще пара таких путей нужно обрабатывать, а нет файлов с первого ресурса - нет обработки дальше.


 
alt7   (2004-03-15 12:10) [2]

Пробовал я, не пускает... (расширивал каталоги на пользователя под которым лезу тудысь)...
Не помню, какая ошибка вылетает, но вылетает ;)
Да и причем здесь это?

Но тут вся работа застопорилась, потому что, еще пара таких путей нужно обрабатывать, а нет файлов с первого ресурса - нет обработки дальше.


 
Reindeer Moss Eater ©   (2004-03-15 12:15) [3]

NetResource.lpLocalName  := nil;
С файлом работать по UNC.


 
Reindeer Moss Eater ©   (2004-03-15 12:15) [3]

NetResource.lpLocalName  := nil;
С файлом работать по UNC.


 
Verg ©   (2004-03-15 12:34) [4]


> DW_Res := WNetAddConnection2(NetResource,
>                                 PChar(_Password), {Password
> (if needed) or empty}
>                                 PChar(_Login), {User name
> (if needed) or empty}
>                                 CONNECT_UPDATE_PROFILE);


Убери это.


 
Verg ©   (2004-03-15 12:34) [4]


> DW_Res := WNetAddConnection2(NetResource,
>                                 PChar(_Password), {Password
> (if needed) or empty}
>                                 PChar(_Login), {User name
> (if needed) or empty}
>                                 CONNECT_UPDATE_PROFILE);


Убери это.


 
alt7   (2004-03-15 12:49) [5]

Спасибо, вместо CONNECT_UPDATE_PROFILE поставил 0 и заработало.
Читал хелп и так не понял про CONNECT_UPDATE_PROFILE ;)
То есть кусок кода с enum теперь не нужен? та беда с ERROR_SESSION_CREDENTIAL_CONFLICT не вылезет?


 
alt7   (2004-03-15 12:49) [5]

Спасибо, вместо CONNECT_UPDATE_PROFILE поставил 0 и заработало.
Читал хелп и так не понял про CONNECT_UPDATE_PROFILE ;)
То есть кусок кода с enum теперь не нужен? та беда с ERROR_SESSION_CREDENTIAL_CONFLICT не вылезет?


 
Verg ©   (2004-03-15 13:07) [6]


> CONNECT_UPDATE_PROFILE


Дает указание запомнить это сет. подключение.
Т.е. если ты его создал с этим флагом, то оно будет существовать до тех пор, пока от него не откажешься с таким же CONNECT_UPDATE_PROFILE флагом.

Либо создавай без этого флага.


 
Verg ©   (2004-03-15 13:07) [6]


> CONNECT_UPDATE_PROFILE


Дает указание запомнить это сет. подключение.
Т.е. если ты его создал с этим флагом, то оно будет существовать до тех пор, пока от него не откажешься с таким же CONNECT_UPDATE_PROFILE флагом.

Либо создавай без этого флага.



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.038 c
3-1081404361
Геннадий
2004-04-08 10:06
2004.05.09
Шифровка/дешифровка данных в распределённой БД


14-1082339863
Думкин
2004-04-19 05:57
2004.05.09
С днем рождения! 19 апреля.


1-1082383546
Vovan>_
2004-04-19 18:05
2004.05.09
О рисовании на Canvas


1-1082291716
Максим
2004-04-18 16:35
2004.05.09
Настройка PrintPreview в QuickReport


14-1081881570
panov
2004-04-13 22:39
2004.05.09
Где найти дополнительное время?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский