关于ASP组件被禁止访问其它机器上已共享文件的问题(200分)

  • 主题发起人 主题发起人 kyq
  • 开始时间 开始时间
K

kyq

Unregistered / Unconfirmed
GUEST, unregistred user!
环境:Windows 2000 Server+IIS V5.0+Delphi V5.0 Service Pack 1
Web Server主机名称为Web1,
要访问的文件所在主机名称为kyq,
ASP组件(DLL)位于Web1上。
ASP组件有一个方法Method1:
function Tabc.Method1:WideString;safecall;
var
ls:TStrings;
begin
ls:=TStringList.Create;
try
try
ls.LoadFromFile('//kyq/share/abc.txt');
Result:='OK!!!!';
except
on e:Exceptiondo
Result:=e.Message;

end;
finally
ls.Free;
end;
end;

写一ASP文件:
<html>
<body>
<%
Dim abc
Set abc=Server.CreateObject("Project1.abc")
Response.Write abc.Method1&amp;"<br>"
%>
<p>That's all</p>
</body>
</html>
运行ASP时,显示无法打开文件//kyq/share/abc.txt,经跟踪,Win32 Error Code为5,即Access is denied(禁止访问)。
1. 若//kyq/share/abc.txt换成//web1/share/abc.txt或c:/share/abc.txt则正常。
2. 若ASP组件在Web Server之外运行,即由其它宿主运行时,一切正常。
请问如何解决?
 
kyq是WIN NT 还是WIN 2000 SERVER?建立信任关系了吗?
 
kyq为Windows 2000 Server,与Web1位于同一工作组,以对等网方式工作。
!!!!大富翁论坛对输入的信息未HTML编码!!!!!

ASP文件为:
&amp;lt;HTML&amp;gt;
&amp;lt;BODY&amp;gt;
&amp;lt;%
Dim abc
Set abc=Server.CreateObject("Project1.abc")
Response.Write abc.Method1
%&amp;gt;
That's all.
&amp;lt;/BODY%gt;
&amp;lt;/HTML%gt;

若ASP组件在Web Server之外运行,即由其它宿主运行时,一切正常。应该与信任关系无关。
 
共享的权限是怎样设置的?
顺便问一句,ASP DLL被web server Load后,怎样实时卸载?
我试验时好像web server shutdown也没用,DLL仍然删除不了。(IIS 4.0)
(最近这两天对这个感兴趣,正要试验,就碰上这个问题)
 
在web1上为//kyq/share建个虚拟目录行不行呢?
 
用WNetAddConnection2把//kyq/share/映射成本地一个硬盘X:先,再X:/abc.txt
 
1. 已实验过,用WNetAddConnection2把//kyq/share/映射成本地一个硬盘X:先,再X:/abc.txt,结果一样。
2. 现在需要打开物理路径的文件,设置虚拟目录是否指Web虚拟目录,若是,似乎无关。
3.共享的权限如下:
//kyq/share为EveryOne,读写权限。
4. ASP DLL被web server Load后,怎样实时卸载?
把服务World Wide Web Publishing Service停止后启动即可,只停止IIS无效。
5.问题已避开,我创建了另外一个COM组件,用于读取文件内容,由ASP组件调用,
一切正常。
各位是否仍想讨论下去吗?

 
只是创建另一个COM组件就行吗?不用放在MTS里面?
我把服务World Wide Web Publishing Service停止,
DLL文件仍然不能删除。
(另:如果要结束此问题,请不要给我分数,谢谢)
 
不要直接在外面删除dll文件,在mts里删,只要那个小球球不是转的,就能删除,不管你的www是否停止。
 
To 温柔一刀:
如果你使用了MTS,请先停止再启动服务World Wide Web Publishing Service,
在MTS的MMC终端里该DLL所属的Package上按右键,选择关闭,再选择启动,
就能如你所愿。
新创建的COM组件放不放在MTS里面都可以。我是做成MTS的。
 
你的web server的匿名帐号一定要属于你要访问的文件的共享帐号。
 
IUSR_ANDY,Guest已属于Guests组。
 
ASP直接访问网络文件确实不行,只能用activeX,
我的一个同事就是这样做的,当初我还不明白,
现在kyq的问题看来是一样的。
但是kyq说:“新创建的COM组件放不放在MTS里面都可以”
我希望能再次确认一下,因为据我所知,好像必须放在MTS才行。
 
IUSR_ANDY是你的匿名帐号,但是他是否属于你要访问的另一台机器中的共享文件的用户帐号之一呢?清查看一下你的共享文件的共享用户,是否有IUSR_ANDY这个帐号,注意IUSR_ANDY这个帐号是否属于你所在的这个域,也许IUSR_ANDY是属于你的工作组,而非属于这个域。
我曾经实验过,我把域中的一个帐号设为匿名帐号,而且把这个帐号加入另一台机器的共享文件的共享用户。我的共享文件是一个access数据库文件,这是我用asp直接读取数据库没有问题,但当我把这个匿名帐号从共享文件的共享用户中删除时,就发生不能访问文件的问题。
不过,我得环境是nt4,sp6,iis4。

另外,新创建的COM组件就是不放在mts中也可以被asp调用,但当你调用过后再去调试此com时,你会发现你的com不能被替换或刷新。但如果你新创建的COM组放在mts中,调用过后,很容易就会被替换或刷新。
 
jianer后面的情况,把服务World Wide Web Publishing Service停止后启动即可。
应该正确,答案接受,分数送上。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
928
SUNSTONE的Delphi笔记
S
后退
顶部