使用给定的用户名和密码从共享目录复制文件

发布于 2024-12-07 07:56:57 字数 42 浏览 0 评论 0原文

有没有办法使用不同于当前用户名和密码的特定网络共享目录创建/复制文件?

Is there a way to create/copy a file to/from specific network shared directory with different than current user name and password ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

骄兵必败 2024-12-14 07:56:58

这是我用来连接远程驱动器并将其映射到本地驱动器号的方法(以及相应的取消映射操作)。将驱动器映射到驱动器号后,您就可以像使用任何其他驱动器一样进行复制:

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;

Here's what I use to connect and map a remote drive to a local drive letter (along with the corresponding unmapping operation). Once you've mapped the drive to a drive letter, you copy just like you would with any other drive:

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;

Example use:

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;
千と千尋 2024-12-14 07:56:58

@Luke 在评论中建议的内容,或者您​​可以 PInvoke 到 NetUseAdd 函数。您可以在对 NetUseAdd 的调用中传递用户名和密码,然后当前用户会话访问此文件共享上的资源的所有尝试都将使用这些凭据。 查看 pinvoke.net 上的示例了解如何调用它 - 您将必须将其翻译为Delphi。

Either what @Luke suggested in a comment, or you can PInvoke to NetUseAdd function. You can pass user name and password in a call to NetUseAdd and then all attempts from current user session to access resources on this file share will use those credentials. See example on pinvoke.net on how to call it -- you will have to translate this to Delphi.

二手情话 2024-12-14 07:56:58

或者,您可以使用 Windows API CreateProcessWithLogon() (链接到 MSDN)。

Alternately you could use the Windows API CreateProcessWithLogon() (Link to MSDN).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文