升级到64位服务器后,你有没有DLL失败?

时间:2010-06-15 21:33:08

标签: asp-classic 64-bit

我想知道升级服务器后是否有其他人遇到过失败的DLL。

在使用经典ASP十年后,我的公司正在升级我们的代码和服务器。我们已经设置了运行Windows 2008和IIS 7的新服务器。我们的经典ASP代码和新的asp.net mvc代码运行良好。

当我们开始将旧网站迁移到新服务器时,我们的问题就开始发生了。当试图在实际的服务器机器的浏览器上加载页面时,我们最初得到500错误。如果我们刷新页面,则会加载某些页面,但会显示错误:

  

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

     

Server.CreateObject失败

     

/folder/scriptname.asp,第24行

     

800401f3

btw:在远程计算机上,我们只会收到500个错误。

第24行是脚本中的第一个可执行代码:

'23 lines of comments

set A0SQL_DATA = server.createobject("olddllname.Data")

'the rest of the script

该特定行试图使用十年前的DLL来创建服务器对象。我认为服务器配置不是问题,因为我能够毫无问题地创建“adodb.recordset”服务器对象。

在64位系统上运行正确注册的旧DLL时是否存在问题?

有没有办法让旧DLL在64位系统上运行?

修改

我已确认该网站的应用程序池在32位兼容模式下运行,但每当调用set A0SQL_DATA = server.createobject("olddllname.Data")时,该网站仍会发送相同的错误。

2 个答案:

答案 0 :(得分:2)

  

在64位系统上运行正确注册的旧DLL时是否存在问题?

是的,32位DLL不再适用于64位Windows的最突出的例子似乎是Microsoft Jet Engine,即访问.mdb文件所需的驱动程序。从there is no 64-bit version开始,在经典ASP应用程序中访问.mdb文件的唯一方法是在32位兼容模式下运行IIS(或准确的应用程序池)。


如何检测您是处于32位还是64位模式(未经测试):

Set shell = CreateObject("WScript.Shell")
Response.Write shell.ExpandEnvironmentStrings("%PROCESSOR_ARCHITECTURE%")

这应该在64位模式下输出AMD64,在32位模式下输出x86(在64位处理器上是本机32位或32位模拟)。

答案 1 :(得分:1)

好吧,错误800401f3的意思是“无效的班级名称”。这强烈暗示DLL使用错误的ProgId注册(或者ProgId完全丢失)。当您的系统管理员验证DLL已注册时,他是否还验证其ProgId是否为“olddllname.Data”?