Asp classic 你有DLL';升级到64位服务器后s失败?

Asp classic 你有DLL';升级到64位服务器后s失败?,asp-classic,64-bit,Asp Classic,64 Bit,我想知道是否有其他人在升级服务器后遇到了失败的DLL 在使用经典ASP十年之后,我的公司正在升级我们的代码和服务器。我们已经设置了运行Windows 2008和IIS 7的新服务器。我们的经典ASP代码和新的ASP.net mvc代码工作得非常好 当我们开始将旧网站移动到新服务器时,问题就开始出现了。当尝试在实际服务器的浏览器上加载页面时,我们最初得到一个500错误。如果刷新页面,则会加载部分页面,但随后会显示错误: 服务器对象错误“ASP 0177:800401f3” Server.Creat

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

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

当我们开始将旧网站移动到新服务器时,问题就开始出现了。当尝试在实际服务器的浏览器上加载页面时,我们最初得到一个500错误。如果刷新页面,则会加载部分页面,但随后会显示错误:

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

Server.CreateObject失败

/文件夹/scriptname.asp,第24行

800401f3

顺便说一句:在远程机器上,我们只会收到500个错误

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

'23 lines of comments

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

'the rest of the script
该特定行尝试使用一个10年前的DLL来创建服务器对象。我不认为服务器配置有问题,因为我能够创建“adodb.recordset”服务器对象而没有任何问题

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

有没有办法让旧的DLL在64位系统上工作

编辑
我已经确认站点的应用程序池是以32位兼容模式运行的,但是每当调用
set A0SQL\u DATA=server.createobject(“olddlname.DATA”)
时,站点仍然会发送相同的错误。

错误800401f3表示“类名无效”这强烈表明DLL使用错误的ProgId注册(或者ProgId完全丢失)。当您的系统管理员验证DLL已注册时,他是否也验证了其ProgId为“olddllname.Data”?

嗯,错误800401f3表示“无效类名”。这强烈表明DLL已使用错误的ProgId注册(或ProgId完全丢失)。当您的系统管理员验证DLL是否已注册时,他是否也验证其ProgId是否为“olddllname.Data”

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

是的,32位DLL不再在64位Windows上工作的最突出的例子似乎是Microsoft Jet引擎,即访问.mdb文件所需的驱动程序。因为,在经典ASP应用程序中访问.mdb文件的唯一方法是以32位兼容模式运行IIS(确切地说是应用程序池)


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

这应该以64位模式输出
AMD64
,以32位模式输出
x86
(本机32位或64位处理器上的32位模拟)

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

是的,32位DLL不再在64位Windows上工作的最突出的例子似乎是Microsoft Jet引擎,即访问.mdb文件所需的驱动程序。因为,在经典ASP应用程序中访问.mdb文件的唯一方法是以32位兼容模式运行IIS(确切地说是应用程序池)


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



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

当您说升级时-是从2k3 64位升级到2k8 R2(64位)还是。。。dll是64位的吗?如果你完全改变了操作系统,就像Greg询问的那样,那么另一个罪魁祸首可能是权限。Windows已逐渐收紧了各个版本的权限,并且您的DLL可能正在尝试执行在其运行的帐户上下文中没有权限执行的操作。在旧版本的Windows上,它可能工作得很好,默认情况下,在旧版本的Windows中,权限的粒度更小,限制也更小。@Greg-我不确定你的问题到底是什么意思。我知道我们以前使用的是32位操作系统,现在我们使用的是windows server 2008。@quakkels,您的旧DLLName.Data依赖于其他任何东西吗?您的progid似乎未在此64位计算机中注册。是否需要注册(regsvr32)DLL或其依赖项?尝试运行一个调用“CreateObject”的简单独立应用程序。好luck@Syd-我创建了一个简单的经典asp应用程序,它使用CreateObject创建adodb.recordset对象。当你说升级是成功的-是从2k3 64位升级到2k8 R2(64位)还是。。。dll是64位的吗?如果你完全改变了操作系统,就像Greg询问的那样,那么另一个罪魁祸首可能是权限。Windows已逐渐收紧了各个版本的权限,并且您的DLL可能正在尝试执行在其运行的帐户上下文中没有权限执行的操作。在旧版本的Windows上,它可能工作得很好,默认情况下,在旧版本的Windows中,权限的粒度更小,限制也更小。@Greg-我不确定你的问题到底是什么意思。我知道我们以前使用的是32位操作系统,现在我们使用的是windows server 2008。@quakkels,您的旧DLLName.Data依赖于其他任何东西吗?您的progid似乎未在此64位计算机中注册。是否需要注册(regsvr32)DLL或其依赖项?尝试运行一个调用“CreateObject”的简单独立应用程序。好luck@Syd-我创建了一个简单的经典asp应用程序,它使用CreateObject创建adodb.recordset对象。成功了我和我的系统管理员谈过了。。。他认为该站点已经处于32位模式。有什么办法可以证实吗?可能有其他问题吗?@quakkels:我添加了一些ASP代码来测试您是否处于32位或64位模式。@Heinzi-谢谢您的代码。它显示为“x86”,但该站点仍然没有运行此功能dll@quakkels:那么肯定还有其他问题。DLL注册是否正确?因为它是一个32位COM对象,所以
Set shell = CreateObject("WScript.Shell")
Response.Write shell.ExpandEnvironmentStrings("%PROCESSOR_ARCHITECTURE%")