9

我正在尝试在 Windows 2008 64 位 R2 机器上执行经典的 ASP 页面。

最初的问题在于注册 dll;现在已经解决了。 在 Windows Server 2008 R2 上注册 DLL 文件

现在,当我尝试访问该页面时,出现此错误

活动服务器页面错误“ASP 0241”

创建对象异常

索引.asp

'(null)' 的 CreateObject 导致异常 C0000005。

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

当我将代码从 更改为Server.CreateObjectCreateObject,我最终会遇到此错误

Active Server Pages 错误“ASP 0115”意外错误 index.asp

外部对象中出现可捕获错误 (C0000005)。脚本无法继续运行。

我检查了所有可能的内容 - 访问权限和管理员权限等。应用程序池设置为无托管代码 + 经典模式。

有什么想法可以解决这个问题吗?

4

12 回答 12

2

您不会在 ASP 中解决此问题。C0000005 是访问冲突异常。当代码尝试读取它尚未分配的内存时,就会发生这种情况。

dll 在加载时或在对象的构造过程中做了坏事。

您是否使用简单的 .vbs 文件测试了 dll?

于 2011-01-11T21:02:03.703 回答
2

我有完全相同的错误。

在我的情况下,C0000005 错误是由缺少依赖关系引起的。

ProcessMonitor 帮我找到它。(按进程过滤,勾选“未找到名称”) 在 dll 上找不到名称

将所需文件复制到正确的位置解决了我的问题。(在我的情况下,VB6FR.dll 是法语中 vb6 所需的依赖项。)

于 2013-09-17T15:22:06.663 回答
2

我也花了几个小时追查这个。

就我而言,这是由于多次重用记录集对象而没有在 DB 调用之间关闭它造成的。该代码在几个类似的实例中没有明显的问题,然后其中一个刚刚停止容忍该过程。

当我试图关闭页面末尾的记录集时发生错误,这使故障排除更加困难。

我清理了代码,确保记录集在调用之间关闭,这解决了问题。

于 2014-08-09T12:13:04.657 回答
1

多次加载 csv 文件数据时出现同样的错误。第 1 步 - 首先创建一个临时表将 csv 数据传输到临时表中,然后移动到主表并在数据移动后删除临时表。这必须以编程方式完成。

第 2 步 - 转到 mysql 并选择数据库并使用此查询SHOW FULL PROCESSLIST;,无需使用括号。这将显示正在运行的对象的状态。如果您Sleep在第二次尝试上传文件之前发现任何状态设置为清除它的对象。通常默认等待时间约为 28000 秒。您需要根据需要减少它。减少等待时间的代码是SET GLOBAL wait_timeout=5;. 通过mysql设置。这会将您的全局等待时间重新设置为 5 秒。并根据您的需要进行更改。这应该可以解决您的问题。祝一切顺利。

于 2016-10-25T14:56:15.487 回答
1

在服务器上安装KB4093114后,我也遇到了同样的问题。(我不是 100% 确定 KB 导致了问题,但我怀疑是因为脚本引擎已更新。)

该问题是由将 varchar(max) 字段输出到标记的记录集引起的。即使错误没有提供行号,我也能够通过反复试验将其精确定位到 varchar(max) 字段的输出。

<%
...
rs.Open "SELECT LongDescription FROM Table1"
while (not rs.EOF)
   %> <p><%= rs("LongDescription") %></p> <%    ' ERROR HAPPENS BECAUSE OF THIS LINE
   rs.MoveNext
wend
%>

删除该行可以解决问题。此外,将字段转换为非最大 varchar 也可以修复它:

 rs.Open "SELECT LongDescription = Cast(LongDescription as varchar(4000)) FROM Table1"

更糟糕的是,我发现一旦发生错误,即使修复它也需要回收应用程序池以使错误消失

于 2018-04-23T20:06:48.933 回答
1

我在新的 Windows 10 1803 安装上在 IIS 中运行一些非常旧的 ASP 代码,并让它短暂正常运行,然后在 Office 中运行修复以修复 Outlook 问题后开始收到此错误消息。

在这种情况下,重新安装 Microsoft Access 数据库引擎可以解决问题。

于 2019-08-05T18:43:34.303 回答
0

根据我的经验,您使用的是 AVG Free,并且在更新后,您遇到了这种错误。

于 2016-03-13T17:40:14.707 回答
0

在尝试使用我自己的 com 控件时遇到了同样的错误,在我的情况下,它原来是由我的 dll 在调试模式下编译引起的。

有两种解决方法:

  1. 在调试模式下运行 IIS。对于 32 位,您使用以下行:C:\Windows\SysWOW64\inetsrv>w3wp.exe -debug

    请注意,您必须停止 IIS 服务,对于 64 位,您必须使用 System32 中的服务。

  2. 编译发布版本:)

于 2016-04-06T09:52:36.677 回答
0

我在这里添加了这个答案,尽管我意识到这比第一次回答问题时要晚得多。我把答案放在这里,以防其他人免去我刚刚经历的麻烦。

重新安装 Windows 10 后,我的 ASP 页面上也出现此错误。以前在我的 localhost IIS 设置上,同一页面没有错误。但是 - 现在它做到了 - 出现以下错误:

Active Server Pages 错误“ASP 0115”意外错误 index.asp

外部对象中出现可捕获错误 (C0000005)。脚本无法继续运行。

我尝试了很多东西来尝试对其进行排序,例如:

  1. 再次重新安装 Windows 10
  2. 在新的 Windows 10 安装上重新安装 IIS
  3. 尝试各种版本的 MySQL 和 ODBC 连接器的组合
  4. 根据此页面上的答案之一检查 Windows 进程监视器中丢失的文件
  5. 使用应用程序池
  6. 使用许多版本的 Microsoft Visual C++ Redistributables

我的问题是 SQL 插入 - 当它运行时,我得到了错误。

这是它的精简版:

sql = ""
sql = sql & " INSERT INTO my_table ( "
sql = sql & " card_sender,  "
sql = sql & " senders_email,  "
sql = sql & " recipients_email,  "
sql = sql & " card_body,  "
sql = sql & " session_id, "
sql = sql & " replyID) VALUES ( "
sql = sql & " ?,  "
sql = sql & " ?,  "
sql = sql & " ?,  "
sql = sql & " ?,  "
sql = sql & " ?,  "
sql = sql & " ?)  "

Set stmt = Server.CreateObject("ADODB.Command")
stmt.ActiveConnection = oConn
stmt.Prepared = true
stmt.commandtext = sql

stmt.Parameters.Append stmt.CreateParameter("@001_card_sender", adVarChar, adParamInput, 255, card_sender)
stmt.Parameters.Append stmt.CreateParameter("@002_senders_email", adVarChar, adParamInput, 255, senders_email)
stmt.Parameters.Append stmt.CreateParameter("@003_recipients_email", adVarChar, adParamInput, 255, recipients_email)
stmt.Parameters.Append stmt.CreateParameter("@004_card_body", adLongVarChar, adParamInput, 256665, card_body)
stmt.Parameters.Append stmt.CreateParameter("@sessionsessionID", adVarChar, adParamInput, 255, session.sessionID)
stmt.Parameters.Append stmt.CreateParameter("@replyID", adVarChar, adParamInput, 255, session("replyID"))

stmt.Execute
Set stmt = Nothing

通过构建 SQL 并查找触发错误的行的过程,我发现此行导致了问题:

stmt.Parameters.Append stmt.CreateParameter("@replyID", adVarChar, adParamInput, 255, session("replyID"))

在我的示例中,session("replyID")未设置该值,这触发了错误。

当我更改代码以检查是否设置了会话变量时,它解决了问题:

...
foo = session("replyID")
if foo = "" then foo = 1
...
stmt0003.Parameters.Append stmt0003.CreateParameter("@replyID", adVarChar, adParamInput, 255, foo)

更多测试证实,任何为空的变量都会发生错误,因此我必须为每个变量添加一个 if 语句,并在它为空时将其设置为某个值,以防止这些我不习惯出现的错误在同一台 PC 上以前安装的 Windows 10。

在花了大约一天的时间研究它之后,深入了解它是一种解脱。

于 2019-12-05T20:54:45.303 回答
0

您刚刚进行了 Windows 更新吗?我做到了,大约在 2021-11-20 到 21H2 19044.1387。不知何故,更新以及其他更新使我的代码不断崩溃。我发现我可以编写一些错误代码,但是数据库 (MariaDB 10.1) 返回的值不匹配。我发现我可以以不同的方式声明我的 sql 调用以获得正确的返回——但很快就停止了重新编码。不知何故NULL,处理方式不同。

我开始怀疑数据库的驱动程序不像以前那样工作了。我将所有连接从 更改Server.CreateObjectCreateObject。最后更新了数据库(我现在使用的是 MariaDB 10.6),我正在使用新的专用 MySQL 8.0 Unicode 64 位驱动程序。我正在通过 DSN 连接。

更新:这些 (C0000005) 错误在使用Server.CreateObject. 现在CreateObject终于开始看起来很有希望了。

于 2021-11-25T15:48:25.630 回答
0

我正在使用此代码来获取每个页面上的图像高度和宽度,并且WIA不知何故存在内存泄漏并会随机崩溃 IIS 应用程序池:

    SET objFSO= CreateObject("Scripting.FileSystemObject")
    If objFSO.fileExists(is_blog_img) and InStr(is_blog_img,".webp") = 0  Then
        dim oIMG
        SET oIMG = CreateObject("WIA.ImageFile") '<< do not use this!
        oIMG.loadFile(is_blog_img)
        og_image_h = "" & oIMG.Height
        og_image_w = "" & oIMG.Width
        SET oIMG = nothing
        if og_image_h & "" <> "" then
            %>
            <meta property="og:image:width" content="<%=og_image_w %>" />
            <meta property="og:image:height" content="<%=og_image_h %>" />
            <%
        end if
    else
        response.write("<!-- no file is_blog_img -->")
        og_image_w = "0"
        og_image_h = "0"
    end if
    SET objFSO = Nothing 
于 2022-02-26T16:01:43.540 回答
-2

您可能想查看此博客条目,标题为“Classic ASP (ASP 3.0) doesn't work on 64bit with 32bit COM objects” http://blogs.msdn.com/b/robgruen/archive/2005/05/26 /422328.aspx

它有点过时了,作者错误地将 ASP 处理程序称为 ISAPI 过滤器(它是扩展,而不是过滤器),但其他信息似乎很好。

如果 asp 处理程序仅编译为 64 位,则无论您做什么,都无法将 32 位 COM 对象加载到其中。

作者确实提到了一些关于 COM+ 解决方案的内容。我有一种感觉,一个 32 位进程外 COM+ 包将能够加载这个 32 位 COM 对象,并且您的 ASP 页面可以跨进程调用这个 COM+ 包。

祝你好运,马克

于 2011-01-11T21:21:28.393 回答