是否有办法使用与当前用户名和密码不同的方式在特定网络共享目录中创建/复制文件?
答案 0 :(得分:1)
@Luke在评论中建议的内容,或者你可以PInvoke到NetUseAdd的功能。您可以在调用NetUseAdd时传递用户名和密码,然后从当前用户会话访问此文件共享上的资源的所有尝试都将使用这些凭据。关于如何调用它的pinvoke.net上的See example - 你必须将它翻译成Delphi。
答案 1 :(得分:1)
或者,您可以使用Windows API CreateProcessWithLogon()
(Link to MSDN)。
答案 2 :(得分:1)
这是我用来连接远程驱动器并将其映射到本地驱动器盘符(以及相应的取消映射操作)。将驱动器映射到驱动器号后,就像使用任何其他驱动器一样进行复制:
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;