Скопируйте файл из общего каталога с указанным именем пользователя и паролем - PullRequest
0 голосов
/ 27 сентября 2011

Есть ли способ создать / скопировать файл в / из определенной общей сетевой папки, отличающийся от текущего имени пользователя и пароля?

Ответы [ 3 ]

1 голос
/ 27 сентября 2011

Также вы можете использовать Windows API CreateProcessWithLogon() ( Ссылка на MSDN ).

1 голос
/ 27 сентября 2011

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

function MapNetworkDrive(const RemoteName, LocalDrive, 
  UserName, Password: string): Boolean;
var
  NetRes: TNetResource;
  Res: DWord;
begin
  Result := True;
  FillChar(NetRes, SizeOf(TNetResource), 0);
  NetRes.dwType := RESOURCETYPE_DISK;
  NetRes.lpRemoteName := PChar(RemoteName);
  NetRes.lpLocalName := PChar(LocalDrive);
  Res := WNetAddConnection2(NetRes, PChar(Password), PChar(UserName), 0);
  Result := (Res = NO_ERROR);
  if not Result then
    SysErrorMessage(Res);
end;

function TForm1.UnmapNetworkDrive(const LocalDrive: string): Boolean;
var
  Res: DWord;
begin
  Res := WNetCancelConnection2(PChar(LocalDrive), 0, True);
  Result := (Res = NO_ERROR);
end;

Пример использования:

begin
  if MapNetworkDrive('\\192.168.1.56\C$', 'H:', 'fred', 'password') then
  begin
    try
      // Do whatever between local drive and drive 'H:'
    finally
      UnmapNetworkDrive(Local);
    end;
  end;
end;
1 голос
/ 27 сентября 2011

Либо то, что @Luke предложил в комментарии, либо вы можете PInvoke для NetUseAdd функции.Вы можете передать имя пользователя и пароль при вызове NetUseAdd, и тогда все попытки из текущего сеанса пользователя получить доступ к ресурсам в этой общей папке будут использовать эти учетные данные. См. Пример на pinvoke.net о том, как его вызвать - вам придется перевести это на Delphi.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...