Delphi自带Web应用示例Iserver.dll的正确设置
一次偶然的机会,我对将delphi自带的iserver.dllWeb应用服务器放到windows xp pro上运行,结果发现其初始的文本甚而显示正常,而当我点击其页面中访问数据库的链接时,则总是提示服务器内错误(http 500)。在肯定自己的iis目录及权限设置无误的情况下,百思不得其解。今天在网上查看microsoft2002年5月号的“iis有问必答时”,在Brett Hill答复一则“尝试用 ASP 访问数据库时“访问被拒绝””问题中,经他的提示,我用filemon工具对iserver.dll的文件访问进行监视,最后发现造成iserver.dll运行错误的主因是pdoxuser.net文件的访问权限不足。
这是Brett Hill的该篇文章中的一段话“有一种极棒的免费实用工具,叫做 Filemon,可以到 http://www.sysinternals.com 上找到它。在我讲授 IIS 时,我让学生们将此工具保存在软盘上,不管到哪里都随身带着它。我并不完全是在开玩笑。您可以用 Filemon 快速诊断出多数权限问题,因为它可以实时显示服务器上被访问的所有文件、调用进程的名称以及访问结果。这样,对于任何“访问被拒绝”消息,不管问题在嵌套的 include 中埋多深,也不管临时索引有多模糊--都可轻松找出。 ”,相信对一些程序员有一些帮助。
下面看一看我的发现过程:
1、运行FileMon软件,在筛选器中排除其进程,减少监视目标,同时暂停文件监视
2、打开IE并打开Http://loclahost/WebApp/iserer.dll(WebApp是我的IIS服务器中的一个可执行虚目录),此时iserver.dll的初始文件页面将正常。
3、打开Filemon的文件监视。在IE中点击初始页面中的二级链接
(Http://loclahost/WebApp/iserer.dll/custumoerlist),此时“服务器内部错误”又会出现。
4、切换到Filemon,你将发现dllhost.exe访问c:\pdoxuser.net时出现“访问被拒绝”。
5、找到pdoxuser.net,将因特网来宾帐号加入到访问列表中,并允许其读写权限。
6、打开dcomcnfg.exe,关闭“正在运行程序”中iis相关内容。然后,在IE中重新点击初始而中的二级链接,一切OK!
问题出现的原因:
iserver.dll使用parodox数据库为其页面生成源,由于应用程序在访问parodox数据库时要读写pdoxuser.net文件,则pdoxuser.net文件能否正常读写就成了应用程序得以正常运转的前提。在windows xp中,iis服务器一般用host/iusr_host帐号来访问资源(host是计算机的名字),而该帐号的本地权限是非常有限的,其只能读取iis相应虚目录中的资源。pdoxuser.net一般被放在c:盘根目录下(也可以人为移动),且host/iusr_host帐号默认没能访问权限,因此,iserver.dll在运行过程中通过BDE引擎访问数据库时被拒绝。在IE中则补提示“服务器内部错误http 500)。
昆仑踏月2005年4月于乌鲁木齐