如何让旧的 DLL 在 64 位服务器上运行

如何让旧的 DLL 在 64 位服务器上运行

我正在将我公司的网站从 Windows 2003x86 服务器迁移到运行 IIS 7.5 的 Windows 2008x64。

我遇到的问题是,所有在旧服务器上运行良好的 DLL 现在每次调用时都会出错。我得到的只是一般错误,例如:

服务器对象错误‘ASP 0177:800401f3’

Server.CreateObject 失败

/folder/scriptname.asp,第 24 行

800401f3

出错的行是:

'23 lines of comments  
set A0SQL_DATA = server.createobject("olddllname.Data")  
'the rest of the script 

我已经在设置为 32 位模式的应用程序池中运行该网站。但是,我还是收到错误。

有人遇到过这种情况吗?我很沮丧,因为我查找的所有信息都说我需要做的就是将应用程序池设置为在 32 位模式下运行。我这样做了,但仍然不起作用。我还能检查什么?

答案1

这里如果发现这个:

此错误表示“无效的类字符串”——换句话说,对 CreateObject 的调用失败,因为 OLE 子系统找不到名称对象。原因包括:

毕竟您确实没有在服务器上运行 regsvr32。

您运行了 regsvr32 但是它报告了错误。

有人修改了注册表的一部分的安全性,导致 OLE 子系统无法读取全部或部分 HKEY_CLASSES_ROOT 树。

您尝试创建的对象的名称拼写错误或者不正确。

确定是否是权限问题

另外,由于您要从 03 迁移到 08,您是否安装了 IIS 角色中的 IIS 6 管理兼容性插件?我不是 IIS 或 ASP 专家,所以我希望这能有所帮助。

答案2

可能发生的情况是,您的 DLL 是 32 位 DLL,而应用程序池在 64 位下运行。您需要做的是将运行应用程序的应用程序池更改为 32 位应用程序池。请参阅 enable32BitAppOnWin64:http://www.iis.net/ConfigReference/system.applicationHost/applicationPools/add

您可以在 UI 中通过选择 AppPools 列表中的应用程序池(选择树节点)并使用高级设置来启用它来执行此操作。

相关内容