我想知道升级服务器后是否有其他人遇到过失败的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")
时,该网站仍会发送相同的错误。
答案 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”?