我试图在Windows 2008 64位R2框上执行经典ASP页面。
最初问题在于注册dll:现在已经修复了。 Register DLL file on Windows Server 2008 R2
现在,当我尝试访问该页面时,我收到此错误
Active Server Pages错误' ASP 0241'
CreateObject Exception
index.asp
'(null)'的CreateObject导致异常C0000005。
服务器对象错误' ASP 0177:c0000005'
当我将代码从Server.CreateObject更改为CreateObject时......我最终得到了这个错误
Active Server Pages错误' ASP 0115'意外的错误 index.asp
外部对象中发生了可捕获的错误(C0000005)。该脚本无法继续运行。
我检查了所有可能的内容 - 访问权限和管理权限等。 应用程序池设置为No Managed Code + Classic模式。
有任何解决此问题的想法吗?
答案 0 :(得分:2)
你不会在ASP中解决这个问题。 C0000005是访问冲突异常。当代码尝试读取尚未分配的内存时会发生这种情况。
dll在加载或构造对象时会做坏事。
您是否使用简单的.vbs文件测试了dll?
答案 1 :(得分:1)
我有完全相同的错误。
在我的情况下,C0000005错误是由缺少依赖性引起的。
ProcessMonitor帮助我找到它。 (按过程过滤,然后选中“找不到姓名”)
在正确的位置复制所需的文件解决了我的问题。 (就我而言,VB6FR.dll是法语中vb6的必需依赖。)
答案 2 :(得分:0)
我花了好几个小时追逐它。
在我的情况下,它是由多次重用记录集对象而不在DB调用之间关闭它引起的。代码在几个类似的实例中没有明显的问题,然后其中一个只是停止容忍这个过程。
当我尝试关闭页面末尾的记录集时发生错误,这使得故障排除更加困难。
我清理了代码,确保记录集在两次调用之间关闭,这解决了问题。
答案 3 :(得分:0)
根据我的经验,您使用的是AVG Free,在更新后,您遇到了这种错误。
答案 4 :(得分:0)
在尝试使用我自己的com控件时遇到同样的错误,在我的情况下,结果是我的dll在调试模式下编译。
有两种解决方法:
在调试模式下运行IIS。对于32位,您使用以下行: C:\ Windows \ SysWOW64 \ inetsrv> w3wp.exe -debug
请注意,您必须停止IIS服务,对于64位,您可以使用System32中的那个。
编译发布版本:)
答案 5 :(得分:0)
我在多次加载csv文件数据时遇到了同样的错误。 步骤1 - 首先创建临时表以将csv数据传输到临时表,然后移动到主表并在移动数据后删除临时表。这必须以编程方式完成。
步骤2 - 转到mysql并选择数据库并使用此查询(SHOW FULL PROCESSLIST;)使用不带brakets。这将显示正在运行的对象的状态。如果您发现状态为“睡眠”的任何对象,则需要在第二次尝试上载文件之前将其清除。通常默认的等待时间约为28000秒。您需要根据要求减少它。减少等待时间的代码是(SET GLOBAL wait_timeout = 5;)。使用没有支架。使用这是mysql。这会将您的全球等待时间重新设置为5秒(根据您的需要进行更改)。这应该可以解决您的问题。一切顺利。
答案 6 :(得分:0)
我在服务器上安装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
%>
删除该行可修复问题。此外,将字段强制转换为非max varchar也会修复它:
rs.Open "SELECT LongDescription = Cast(LongDescription as varchar(4000)) FROM Table1"
更糟糕的是,我发现一旦发生错误,即使你修复了,你也需要回收应用程序池以使错误消失。
答案 7 :(得分:0)
我正在新安装的Windows 10 1803上的IIS中运行一些非常旧的ASP代码,并使其暂时正确运行,然后在Office中运行修复程序以修复Outlook问题后开始获取此错误消息。
在这种情况下,重新安装Microsoft Access数据库引擎可以解决此问题。
答案 8 :(得分:0)
我在这里添加了这个答案,尽管我意识到这比第一次回答问题要晚得多。我将答案放在这里,以防它免除我刚经历过的其他麻烦。
重新安装Windows 10之后,我的ASP页面上也出现此错误。以前在本地IIS安装程序中,同一页面没有错误。但是-现在确实如此-出现以下错误:
Active Server Pages错误'ASP 0115'意外错误index.asp
外部对象中发生可捕获错误(C0000005)。该脚本无法继续运行。
我尝试了很多尝试对它进行排序,例如:
我的问题出在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)
更多测试证实,任何为null的变量都将发生错误,因此我必须为每个变量添加一个if语句并将其设置为null,以防止我没有使用这些错误以便在同一台PC上安装以前的Windows 10。
花了大约一天的时间进行研究,这使我深感欣慰。
答案 9 :(得分:-2)
您可能想查看此博客条目,标题为“经典ASP(ASP 3.0)无法在64位上使用32位COM对象”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 +包进行跨进程调用。
祝你好运, 标记