如何在IIS7 64bit中配置Delphi 2010 ISAPI.dll?

时间:2013-03-07 02:10:40

标签: delphi iis-7 isapi

使IISAP7中的ISAPI DLL工作以查询www.website.com/test/bin/ISAPIGet.dll?a=b所需的最小步骤是什么?请不要参考热门谷歌搜索,它们非常通用,不起作用。 我在Delphi2010中编写了非常简单的ISAPIGet.dll,它在IIS5 Win2000中运行良好。然后我把它放在IIS7 SBS2008上, 进入C:\ inetpub \ wwwroot \ website \ test \ bin文件夹。 为/ website创建的网站, 申请/测试, / bin的VirtualDirectory, 在HandlerMappings for / bin中添加脚本映射* .dll到我的ISAPIGet.dll, 在ISAPIandCgiRestrictions中允许我的dll, 创建了32位ApplicationPool非管理代码,经典模式, 绑定到/测试应用程序。 在查询www.website.com/test/bin/ISAPIGet.dll?a=b我遇到各种错误,如500,503(当AppPool失败时),而主页www.website.com正常工作。 我还该怎么办?我是否需要配置web.config文件,在哪里以及如何使用?

2 个答案:

答案 0 :(得分:5)

我记得,我有类似的问题让我们的ISAPI DLL在WinSvr2008R2(64b)上的IIS7中运行。我写了一些快速笔记,帮助我重复最终使其工作的步骤。我会尝试在这里提供这些(至少我们做了什么)。

  1. 将IUSR的“读取和执行,列出文件夹内容和读取”权限授予文件夹C:\PathToISAPI_DLL
  2. 将ISAPI DLL需要运行的所有DLL文件复制到c:\windows\syswow64文件夹(例如,midas.dll,dbxmss.dll等)
  3. 启动IIS管理器
  4. 添加应用程序池“MyAppPool”[无管理,经典,立即开始]
  5. 更改新应用程序池的“高级设置”以允许32位,并设置空闲超时
  6. 使用“MyAppPool”将应用程序“MyApp”添加到您的网站,并将物理路径设置为C:\PathToISAPI_DLL
  7. 现在,您必须在DOS提示符下执行几个步骤才能完成配置:

    cd /d c:\windows\system32\inetsrv
    
    REM *** Grant rights to execute the DLL ***
    appcmd.exe set config -section:isapiCgiRestriction /+[path='C:\PathToISAPI_DLL\ISAPI.dll',allowed='true']
    
    REM *** Grant the url of the Execute access for hander mappings ***
    appcmd.exe set config "Default Web Site/MyApp/ISAPI.DLL" "/commit:Default Web Site/MyApp" /section:handlers /accessPolicy:Read,Script,Execute
    
    REM *** Make sure you have an ISAPI module mapping for *.dll at that path ***
    appcmd.exe list config "Default Web Site/MyApp" /section:handlers | findstr /i *.dll
    

    这是我的笔记的范围。我已经成功地跟踪了他们几次并且它一直有效。我从不只使用GUI就可以使它工作。我总是必须在DOS提示符下运行appcmd命令才能完成配置。

    有时我仍然会看到404错误,在这种情况下,我会从带有ISAPI.DLL的文件夹中删除web.config并再次运行最后两个appcmd命令。当然,我的ISAPI DLL在web.config文件中没有任何其他设置,所以删除它不会有什么坏处......

答案 1 :(得分:1)

是不是因为dll是32位且IIS7是64位进程所以无法读取Delphi 32位dll?

您的主页是静态html,由IIS处理没有问题。

但是当IIS尝试加载ISAPIGet.dll时,它会失败,因为它不是64位库,或者缺少其中一个依赖项。

  • 您是否确定在32位模式下使用IIS7应用程序池?
  • 您是否在同一路径或c:\ windows \ syswow64中拥有所有需要的子库和bpl?