有关映射网络驱动器的问题,请教大家 ( 积分: 200 )

  • 主题发起人 主题发起人 zla
  • 开始时间 开始时间
Z

zla

Unregistered / Unconfirmed
GUEST, unregistred user!
我用如下方式
if MapDir('Z:','//192.168.0.1/Share','administrator','123') then
form1.caption:='成功'
else
Form1.caption:='失败'

用如上的方法映射驱动器,有时成功,有时失败,是为什么呢

function MapDir(aDirName,aShareDir,UserName,Pwd:string) : Boolean;
var
netRes: TNetResource;
begin
begin
with netRes do
begin
dwType := RESOURCETYPE_DISK;
lpLocalName := PChar(aDirName);
lpRemoteName :=PChar(aShareDir);
lpProvider := nil;
end;
if WNetAddConnection3(Application.Handle, netRes,PChar(Pwd), pchar(UserName),
CONNECT_UPDATE_PROFILE)=NO_ERROR then
Result:=True
else
Result:=False;
end;
end;
 
我用如下方式
if MapDir('Z:','//192.168.0.1/Share','administrator','123') then
form1.caption:='成功'
else
Form1.caption:='失败'

用如上的方法映射驱动器,有时成功,有时失败,是为什么呢

function MapDir(aDirName,aShareDir,UserName,Pwd:string) : Boolean;
var
netRes: TNetResource;
begin
begin
with netRes do
begin
dwType := RESOURCETYPE_DISK;
lpLocalName := PChar(aDirName);
lpRemoteName :=PChar(aShareDir);
lpProvider := nil;
end;
if WNetAddConnection3(Application.Handle, netRes,PChar(Pwd), pchar(UserName),
CONNECT_UPDATE_PROFILE)=NO_ERROR then
Result:=True
else
Result:=False;
end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
NRW: TNetResource;
begin
with NRW do
begin
dwType := RESOURCETYPE_ANY;
lpLocalName := 'Z:'; // map to this driver letter
lpRemoteName := '//192.168.0.1/Share';
// Must be filled in. If an empty string is used,
// it will use the lpRemoteName.
lpProvider := '';
end;
WNetAddConnection2(NRW, 'administrator','123', CONNECT_UPDATE_PROFILE);
end;
 
dwType改为RESOURCETYPE_ANY,Application.Handle改为netRes试试,lpProvider改为lpProvider:=''。
另外给你一段代码参考
procedure MapNetDrive;
begin
var
NR:TNetResource;
I: Integer;
begin
with NR do
begin
dwType:=RESOURCETYPE_ANY;
lpLocalName:='X:'; //map to this driver letter
lpRemoteName:='//compname/sharedir';
lpProvider:= '';
end;
I := WNetAddConnection2(NR,'wyq','Administrator', CONNECT_UPDATE_PROFILE);
if I <> NO_ERROR then
Showmessage(IntToStr(I))
else
Showmessage('Succeed');
end;
 
代码好像没问题。调用失败之后马上调用 getlasterror函数取得错误码就可以分析失败原因了。
我怀疑可能是网络不通 :)
 
var
NetSource :TNetReSource;
begin
with NetSource do
begin
dwtype:=RESOURCETYPE_DISK;
dwscope:=RESOURCE_CONNECTED;
lpLocalName:='X:';
lpremotename:='//192.168.0.1/recdata';
lpProvider:='';
end;
if WnetAddConnection2(NETSOURCE, '120', '120',CONNECT_UPDATE_PROFILE)=NO_ERROR then
sound.c:='X:/'

end;

我用的,每次都能成功 120 120 是用户名和密码
 
我用的操作系统使XP,他还真是有的时候失败,我想是不是我要映射的共享目录的权限设置有问题呀,
其实我最终要实现的是访问一个共享目录把文件写到该目录下,因为这个工作是在后台进行的,所以我不想在向其他计算机共享目录写文件是出现“输入用户名和密码”的对话框,所以才想映射共享目录。
那位有更好的办法,能否在XP里设置直接就可以在网络上反问,不需要身份验证
 
Xp应该都是失败吧,如果XP的安全设置没修改的话!XP系统的登陆方式和2000不一样,任何网络登陆不管用的是管理员还是其他帐户,都是当成来宾访问处理的!你如果能修改XP的设置就好办了呵呵。
 
后退
顶部