如何在c++builder中调试ISAPI(IIS5.0+window2000)
最近做一个Web模块,需要做成ISAPI。ISAPI的调试需要很多技巧,我在网上找了很多文章,大多数都不是很完整,经过长时间的研究,终于总结出以下一些经验。在此与大家分享。
调试过程按照以下步骤:
1、打开 “Internet信息服务”,在你的web服务器上右击,弹出菜单中选择单击属性。(下图1)
2、在“主目录”页面,设置“应用程序保护”为“低(IIS进程)”。如下图2
这样IIS 就会把ISAPI的DLL导入它的进程内部,允许调试。用同样的方法设置调试的DLL所在的虚拟目录。
注意:如果不设为“低(IIS进程)”,你将会无法调试。
3、打开管理工具->服务 ,找到以下几个服务,将其停止,并且设置它的启动方式为“手动”。
如果重启后IIS Admin Service在“已启动”状态,你就需要将其启动方式设为“禁用”。然后再次重启,看看它是否会启动。在IIS Admin Service启动的时候,是无法正常调试的。
最近做一个Web模块,需要做成ISAPI。ISAPI的调试需要很多技巧,我在网上找了很多文章,大多数都不是很完整,经过长时间的研究,终于总结出以下一些经验。在此与大家分享。
调试过程按照以下步骤:
1、打开 “Internet信息服务”,在你的web服务器上右击,弹出菜单中选择单击属性。(下图1)
2、在“主目录”页面,设置“应用程序保护”为“低(IIS进程)”。如下图2
这样IIS 就会把ISAPI的DLL导入它的进程内部,允许调试。用同样的方法设置调试的DLL所在的虚拟目录。
注意:如果不设为“低(IIS进程)”,你将会无法调试。
3、打开管理工具->服务 ,找到以下几个服务,将其停止,并且设置它的启动方式为“手动”。
如果重启后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、打开管理工具->服务 ,找到以下几个服务,将其停止,并且设置它的启动方式为“手动”。
如果重启后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 中几乎完全一样。
[文章结束]