【发布时间】:2015-12-27 02:34:50
【问题描述】:
我有一个令人沮丧的简单问题。我已将经典 ASP 站点从 Windows Server 2003 IIS 站点迁移到运行 IIS 8.5 的全新 2012 R2 服务器。
当我导航到主页 (http://mydns/default.asp) 时,我收到 500 错误。 IIS 日志显示此错误:
GET /default.asp |4|ASP_0126|Include_file_not_found
查看default.asp页面,我看到文件顶部有如下代码:
<%@ Language=VBScript %>
<!-- #include file="Include/common.asp" -->
<%
dim EMAIL_ID
if Request.QueryString = "" then
...
所以,我的假设是由于第二行而引发了错误。在网站目录下,确实存在Include目录,里面有一个common.asp文件。
# the default.asp page that I'm loading...
E:\websites\mywebsite>dir | findstr default
09/29/2015 10:30 AM 3,237 default.asp
# the common.asp page within the Include folder...
E:\websites\mywebsite>dir Include | findstr common
06/30/2015 10:27 AM 546 common.asp
知道为什么当我在该目录中看到文件时会收到关于找不到文件的错误吗?
更新 1: 通过在浏览器中导航到 common.asp 页面,我在 IIS 中收到以下错误:
GET /Include/common.asp |42|800a01ad|ActiveX_component_can't_create_object:_'Domain.clsAuth'
我找到了this article,它帮助我确认缺少 DLL,因此我正在寻求将其安装在新服务器上。
更新 2: 我能够在旧服务器上找到所需的 Domain.dll。我使用Dependency Walker 确定 Domain.dll 依赖于 MSVBVM60.DLL 所以我抓住了这两个并将它们移动到新服务器。我使用C:\WINDOWS\system32>regsvr32.exe MSVBVM60.DLL成功注册了MSVBVM60.DLL,但是注册Domain.dll失败了。我收到以下错误消息:
事实证明,如果您尝试注册一个不存在的文件,则会遇到同样的错误。例如,我尝试注册“dummy.dll”并得到同样的错误。就像系统看不到文件一样。它在命令行自动完成,但我无法注册它。我也无法在 Dependency Walker 中打开它……应用程序说找不到文件。但我知道它就在那里......
C:\WINDOWS\system32>dir | findstr Domain
04/27/2006 02:57 PM 24,576 Domain.dll
更新 3: 关于注册 DLL 的问题是 32 位与 64 位的问题。我在 system32 文件夹中有一个 32 位 DLL,它是一个仅 64 位的文件夹。一旦我将它移动到 SysWOW64 文件夹(这是一个 32 位文件夹,如图),我就能够注册它。我还从 system32 中注销了 MSVBVM60.DLL,发现它已经在 SysWOW64 中可用。
所以,这个 DLL 问题解决了!但是由于包含文件不同,我再次遇到相同的错误。待续……
更新 4:最终的包含文件错误确实是缺少包含文件。
【问题讨论】:
-
> C:\WINDOWS\system32>regsvr32.exe MSVBVM60.DLL您应该使用 C:\WINDOWS\syswow64>regsvr32.exe 在 64 位操作系统上注册 32 位 DLL -
你的
Domain.dll也是如此。放入SysWow64文件夹并重新注册 -
感谢@Zam,这就是我昨天发现的。要是我们早点连接就好了!
标签: asp-classic iis-8.5