如何在c++builder中调试ISAPI(IIS5.0+window2000)

类别:编程语言 点击:0 评论:0 推荐:

最近做一个Web模块,需要做成ISAPI。ISAPI的调试需要很多技巧,我在网上找了很多文章,大多数都不是很完整,经过长时间的研究,终于总结出以下一些经验。在此与大家分享。

调试过程按照以下步骤:

1、打开 “Internet信息服务”,在你的web服务器上右击,弹出菜单中选择单击属性。(下图1)

2、在“主目录”页面,设置“应用程序保护”为“低(IIS进程)”。如下图2

这样IIS 就会把ISAPI的DLL导入它的进程内部,允许调试。用同样的方法设置调试的DLL所在的虚拟目录。

注意:如果不设为“低(IIS进程)”,你将会无法调试。

3、打开管理工具->服务 ,找到以下几个服务,将其停止,并且设置它的启动方式为“手动”。

Simple Mail Transport Protocol (SMTP) World Wide Web Publishing Service FTP Publishing Service IIS Admin Service

如果重启后IIS Admin Service在“已启动”状态,你就需要将其启动方式设为“禁用”。然后再次重启,看看它是否会启动。在IIS Admin Service启动的时候,是无法正常调试的。

最近做一个Web模块,需要做成ISAPI。ISAPI的调试需要很多技巧,我在网上找了很多文章,大多数都不是很完整,经过长时间的研究,终于总结出以下一些经验。在此与大家分享。

调试过程按照以下步骤:

1、打开 “Internet信息服务”,在你的web服务器上右击,弹出菜单中选择单击属性。(下图1)

2、在“主目录”页面,设置“应用程序保护”为“低(IIS进程)”。如下图2

这样IIS 就会把ISAPI的DLL导入它的进程内部,允许调试。用同样的方法设置调试的DLL所在的虚拟目录。

注意:如果不设为“低(IIS进程)”,你将会无法调试。

3、打开管理工具->服务 ,找到以下几个服务,将其停止,并且设置它的启动方式为“手动”。

Simple Mail Transport Protocol (SMTP) World Wide Web Publishing Service FTP Publishing Service IIS Admin Service

如果重启后IIS Admin Service在“已启动”状态,你就需要将其启动方式设为“禁用”。然后再次重启,看看它是否会启动。在IIS Admin Service启动的时候,是无法正常调试的。

4、打开管理工具->本地安全策略,在“本地策略->用户权力指派”中找到“以操作系统方式操作”的策略,双击,添加你当前的用户。如下图3

6、重启电脑,让修改生效。

7、将以下内容复制后保存为后缀reg的文件。双击合并入注册表。

最近做一个Web模块,需要做成ISAPI。ISAPI的调试需要很多技巧,我在网上找了很多文章,大多数都不是很完整,经过长时间的研究,终于总结出以下一些经验。在此与大家分享。

调试过程按照以下步骤:

1、打开 “Internet信息服务”,在你的web服务器上右击,弹出菜单中选择单击属性。(下图1)

2、在“主目录”页面,设置“应用程序保护”为“低(IIS进程)”。如下图2

这样IIS 就会把ISAPI的DLL导入它的进程内部,允许调试。用同样的方法设置调试的DLL所在的虚拟目录。

注意:如果不设为“低(IIS进程)”,你将会无法调试。

3、打开管理工具->服务 ,找到以下几个服务,将其停止,并且设置它的启动方式为“手动”。

Simple Mail Transport Protocol (SMTP) World Wide Web Publishing Service FTP Publishing Service IIS Admin Service

如果重启后IIS Admin Service在“已启动”状态,你就需要将其启动方式设为“禁用”。然后再次重启,看看它是否会启动。在IIS Admin Service启动的时候,是无法正常调试的。

4、打开管理工具->本地安全策略,在“本地策略->用户权力指派”中找到“以操作系统方式操作”的策略,双击,添加你当前的用户。如下图3

5、重启电脑,让修改生效。

6、将以下内容复制后保存为“将IIS 设置为普通进程.reg”。双击合并入注册表。这样你才能够进行调试。如果你的IIS安装在其他目录,则需要做一些修改。这里的默认目录为“ C:\WinNT\system32\inetsrv”

REGEDIT4

[HKEY_CLASSES_ROOT\AppID\{61738644-F196-11D0-9953-00C04FD919C1}]
"LocalService"=-
"RunAs"=-

[HKEY_CLASSES_ROOT\AppID\{9F0BD3A0-EC01-11D0-A6A0-00A0C922E752}]
"LocalService"=-
"RunAs"=-

[HKEY_CLASSES_ROOT\AppID\{A9E69610-B80D-11D0-B9B9-00A0C922E750}]
"LocalService"=-
"RunAs"="Interactive User"


[HKEY_CLASSES_ROOT\ClsID\{61738644-F196-11D0-9953-00C04FD919C1}]
"LocalService"=-

[HKEY_CLASSES_ROOT\ClsID\{9F0BD3A0-EC01-11D0-A6A0-00A0C922E752}]
"LocalService"=-

[HKEY_CLASSES_ROOT\ClsID\{A9E69610-B80D-11D0-B9B9-00A0C922E750}]
"LocalService"=-


[HKEY_CLASSES_ROOT\ClsID\{61738644-F196-11D0-9953-00C04FD919C1}\LocalServer32]
""="c:\\winnt\\system32\\inetsrv\\inetinfo.exe -e w3svc"

[HKEY_CLASSES_ROOT\ClsID\{9F0BD3A0-EC01-11D0-A6A0-00A0C922E752}\LocalServer32]
""="c:\\winnt\\system32\\inetsrv\\inetinfo.exe -e w3svc"

[HKEY_CLASSES_ROOT\ClsID\{A9E69610-B80D-11D0-B9B9-00A0C922E750}\LocalServer32]
""="c:\\winnt\\system32\\inetsrv\\inetinfo.exe -e w3svc"


[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IISADMIN]
"Start"=dword:3

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSDTC]
"Start"=dword:3

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC]
"Start"=dword:3

你可以使用以下注册表代码把IIS恢复为以服务方式运行。

REGEDIT4

[HKEY_CLASSES_ROOT\AppID\{61738644-F196-11D0-9953-00C04FD919C1}]
"LocalService"="IISADMIN"
"RunAs"=-

[HKEY_CLASSES_ROOT\AppID\{9F0BD3A0-EC01-11D0-A6A0-00A0C922E752}]
"LocalService"="IISADMIN"
"RunAs"=-

[HKEY_CLASSES_ROOT\AppID\{A9E69610-B80D-11D0-B9B9-00A0C922E750}]
"LocalService"="IISADMIN"
"RunAs"=-


[HKEY_CLASSES_ROOT\ClsID\{61738644-F196-11D0-9953-00C04FD919C1}]
"LocalService"="IISADMIN"

[HKEY_CLASSES_ROOT\ClsID\{9F0BD3A0-EC01-11D0-A6A0-00A0C922E752}]
"LocalService"="IISADMIN"

[HKEY_CLASSES_ROOT\ClsID\{A9E69610-B80D-11D0-B9B9-00A0C922E750}]
"LocalService"="IISADMIN"


[-HKEY_CLASSES_ROOT\ClsID\{61738644-F196-11D0-9953-00C04FD919C1}\LocalServer32]


[-HKEY_CLASSES_ROOT\ClsID\{9F0BD3A0-EC01-11D0-A6A0-00A0C922E752}\LocalServer32]


[-HKEY_CLASSES_ROOT\ClsID\{A9E69610-B80D-11D0-B9B9-00A0C922E750}\LocalServer32]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IISADMIN]
"Start"=dword:3

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSDTC]
"Start"=dword:2

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC]
"Start"=dword:2

8、C++builder上的设置:

a)在你的ISAPI DLL 项目中,打开project->Options.页面,"Directories/Conditionals" 分页上,设置"Output directory" 为 "C:\Inetpub\Scripts"或者你的ISAPI DLL 放置的页面。打开所有Debug Information( Complier 分页上点 “Full debug ”按钮)。

b)打开Run->Parameters 页面,设置Host Application 为 "c:\winnt\system32\inetsrv\inetinfo.exe" 或者其他你的IIS的安装目录。 设置Parameters 为"-e w3svc" (不包含双引号)

c)现在你就可以开始正式调试,设置断点,运行程序,然后通过浏览器访问触发,程序就会停在断点处。就像调试一般的应用程序一样。

d)你可以按Ctrl-F2 停止web 服务和调试进程。

在delephi中的调试与c++builder 中几乎完全一样。

[文章结束]

本文地址:http://com.8s8s.com/it/it22940.htm