C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
И снова подключ. сист. диска
** laifik
  Отправлено: 09.12.2003, 09:55


Не зарегистрирован







В общем-то, мне снова приходится возвратиться к вопросу о подключении системного диска: происходит какая-то ерунда. Код прошел без ошибок. Но вот что происходит. Сначала приведу весь код: по стичению обстоятельств Disk, в параметрах кода и имя пользователя тоже Disk. Но я полагаю, это не должно мешать работе кода. Хотя, кто знает?
В .cpp
AnsiString Disk;
AnsiString RemoteName;
AnsiString Ps;
AnsiString Lg;
bool Profile;

Disk = "Y";
RemoteName = "\\\\i1\\Archiv$";
Ps = "user:ICEBERG\\Disk";
Lg = "zaqxsw";

void __fastcall TFormaVvod::Button2Click(TObject *Sender)
{
AddDisk(Disk, RemoteName, Lg, Ps, false);
}

И сама функция:
//---------------------------------------------------------------------- -----
bool _fastcall TFormaVvod::AddDisk(AnsiString Disk, AnsiString RemoteName, AnsiString Lg, AnsiString Ps, bool Profile)
{
if (Disk.Length() == 1) Disk += ":";
NETRESOURCE nr;
nr.dwType = RESOURCETYPE_DISK;
nr.lpLocalName = (LPSTR)(Disk.c_str());
nr.lpRemoteName = (LPSTR)(RemoteName.c_str());
nr.lpProvider = "";
DWORD WNetErr = WNetAddConnection2(&nr, (LPSTR) (Ps.c_str()),
(LPSTR) (Lg.c_str()), Profile ? CONNECT_UPDATE_PROFILE : false);
return WNetErr == NO_ERROR;
}

В .h
public:
bool __fastcall AddDisk(AnsiString Disk, AnsiString RemoteName, AnsiString Ps, AnsiString Lg, bool Profile);

Когда у меня просто открыт Билдер с программой и даже не запущен exe-шник, то я даже не могу подключить диск через net use. Мне выдается сообщение о множественном подключении к серверу. И просит отключить все предыдущие подключения к серверу. Начинаешь отключать, пишет, что подключений не было. В проводнике, на самом деле, ничего нет.
Закрываешь полностью программу, net use начинает работать.
В моей программе при запуске формы не должен подключаться диск. Это происходит только при нажатии на кнопку (событие кнопки).
Что происходит, кто может мне объяснить?
Еще раз напомню задачу: мне нужно команду
Cmd net use y: \\i1\Archiv$ zaqxsw /user:ICEBERG\Disk перевести чисто на язык Си, чтобы это запускалось из Билдера при нажатии на кнопку.
zaqxsw — пароль
ICEBERG — домен
Disk — пользователь.
Заранее, спасибо! sad.gif
Guest
Отправлено: 09.12.2003, 14:51


Не зарегистрирован







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

{
//1.Подключить сетевой ресурс
//WNetAddConnection(NetResourse,Password,LocalName:PChar):longint;
//где NetResourse — имя сетевого ресурса (например '\\P166\c')
//Password — пароль на доступ к ресурсу (если нет пароля, то пустая строка)
//LocalName — имя, под которым сетевой ресурс будет отображен на данном компьютере (например 'F:')

//Пример подключения сетевого диска

NETRESOURCE netResource;
LPSTR netPassword, netLogin;

ZeroMemory(&netResource, sizeof(NETRESOURCE));
netResource.dwType = RESOURCETYPE_DISK;
netResource.lpLocalName = "Y:";
netResource.lpRemoteName = "\\\\i1\\Archiv$";
netPassword = "zaqxsw";
netLogin = "Disk";

if(WNetAddConnection2(&netResource, netPassword, netLogin, NULL) != NO_ERROR)
{
LPVOID lpMsgBuf;

FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR)&lpMsgBuf,
0,
NULL);

MessageBox(Application->Handle,
(const char *)lpMsgBuf,
"GetLastError",
MB_OK | MB_ICONINFORMATION);

LocalFree(lpMsgBuf);
}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
LPSTR LocalDrive;
//так же можно и отключить сетевой ресурс...
LocalDrive ="Y:";
WNetCancelConnection2(LocalDrive,CONNECT_UPDATE_PROFILE,TRUE);

}

Отключение системного диска
{
LPSTR LocalDrive;
//так же можно и отключить сетевой ресурс...
LocalDrive ="Y:";
WNetCancelConnection2(LocalDrive,CONNECT_UPDATE_PROFILE,TRUE);

}
Вот только с AddDisk все-таки не понятно. Как он работает? ohmy.gif

Вернуться в Вопросы программирования в C++Builder