Asp classic 安装Windows Update KB4340558后,如何在经典ASP中正确实例化32位COM对象?

Asp classic 安装Windows Update KB4340558后,如何在经典ASP中正确实例化32位COM对象?,asp-classic,com,iis-8,windows-server-2012-r2,Asp Classic,Com,Iis 8,Windows Server 2012 R2,在Windows Server 2012 R2上,安装update(更新历史记录)/(已安装更新)后,我们无法再使用Server.createobject以32位模式在经典ASP中实例化.NET.dll(互操作)。我们收到错误0x800A01AD“ActiveX组件无法创建对象” 卸载更新时,错误消失。尽管我尽了最大努力,我还是无法找到卸载的替代解决方案。我们希望重新安装更新,并对Windows Server和/或DLL进行必要的更改,以允许正确实例化COM对象。系统日志中没有线索,CVE数据库

在Windows Server 2012 R2上,安装update(更新历史记录)/(已安装更新)后,我们无法再使用
Server.createobject
以32位模式在经典ASP中实例化.NET.dll(互操作)。我们收到错误0x800A01AD“ActiveX组件无法创建对象”


卸载更新时,错误消失。尽管我尽了最大努力,我还是无法找到卸载的替代解决方案。我们希望重新安装更新,并对Windows Server和/或DLL进行必要的更改,以允许正确实例化COM对象。系统日志中没有线索,CVE数据库中没有线索,ASP生成的错误中也没有线索。请帮忙

我们也受到多个客户的影响

我排除了程序集的无效强名称签名,因为框架本身的.NET程序集也受到拒绝访问错误的影响

最后,我通过配置解决了这个问题。 显然,网站的身份验证现在必须与应用程序池的身份匹配。或者IUSR不再具有足够的权限

编辑:2018年7月19日

警告!这一变化还有一个副作用:

asp经典事件“Session_oned”不再被调用,因此最终无法释放资源。 但这也有解决办法

ASP配置属性“system.webServer/ASP/runonendanoonymously”必须为“false”,然后事件再次激发

编辑2:2018年7月23日


正如所指出的,微软现在认为这种“新行为”是一个bug。因此,我想我的“解决方案”现在应该被视为一种变通方法,直到新补丁出现。

我们以特定身份运行应用程序池,以实现网络共享和数据库访问。我也认为我们在读了上面的@keydon's后陷入了困境

但是,我们必须在三个地方配置标识:

  • 应用程序池-应使用特定标识
  • 网站“连接为”-应使用“应用程序池标识”
  • 身份验证功能下的匿名身份验证选项应使用“应用程序池标识”

最后一个是我们错过的东西——多年来只考虑前两个,这意味着我们误读了上面的建议。

我们支持在IIS匿名身份验证中运行的经典ASP站点。应用程序实例化一个以COM可见形式公开的DLL.NET对象

应用最近的安全Windows更新并重新启动操作系统后,我们的应用程序崩溃,出现以下错误:

Microsoft VBScript runtime error '800a01ad'
ActiveX component can't create object: 'NameOfObjectInDLL'
在我们的案例中,最后的建议解决了我们的问题

IIS>身份验证>匿名身份验证-编辑>“应用程序池标识”


这只是为了确认keydon提供的解决方案与TimP提供的解决方案相结合。谢谢他们

在本例中,我们更改了以下3个部分(另外第4个部分用于新权限):

  • Web服务器身份验证属性:使用“应用程序池标识”而不是“特定用户”设置匿名身份验证

  • 应用程序池“标识”属性:设置为“ApplicationPoolIdentity”,而不是“LocalSystem”

  • 物理路径的网站“连接方式”:设置为“应用程序用户(通过身份验证)”而不是“特定用户”

  • 在web应用程序文件所在的共享文件夹中添加“应用程序池标识用户名”的权限。看看

  • 谢谢!!
    (很抱歉,我不能投票表决您的解决方案,因为我是初学者,没有任何声誉)

    Microsoft知道这个问题,相关知识库正在

    这影响了BizTalk、SharePoint、IIS以及使用模拟的经典ASP和.NET应用程序

    经典ASP的解决方法如下

    IIS托管的经典ASP调用.NET COM对象的CreateObject可能会收到“ActiveX组件无法创建对象”错误:

    • 如果您的网站使用匿名身份验证:将网站匿名身份验证凭据更改为使用“应用程序池标识”
    • 如果您的站点使用基本身份验证或Windows身份验证:作为应用程序池标识登录应用程序一次,然后创建.NET COM组件的实例。 之后,其他站点用户将能够激活.NET COM组件而不会出现故障
    • 或者,如果您正在使用Windows身份验证并从运行ASP应用程序的Windows服务器的控制台访问网站:创建.NET COM组件的实例也可以解决其他网站用户的错误

    如果您使用普通CreateObject而不是Server.CreateObject,它会改变什么吗?使用普通CreateObject的结果相同。是否在应用程序池配置中将
    启用32位应用程序设置为
    True
    ?是。该问题是安装昨天(2018年7月10日)发布的.NET安全汇总的结果。在安装更新之前以及卸载更新之后,该控件工作正常。KB articles和CVE数据库没有直接解决汇总修复的可能导致此错误的任何更改,或者如果它们解决了,我就错过了它们。这两个是紧急安全补丁,用于解决最近披露的安全漏洞。我假设在修复问题时,补丁没有通过更多的兼容性测试,就像您的情况一样。因此,你唯一的希望就是通过微软的支持服务来追赶微软,这样他们就能发布比当前版本更好的补丁。此网站对您没有多大帮助。将该屏幕截图翻译为英文:在左侧窗格中选择您的网站,在右侧窗格中单击“身份验证”,然后选择“匿名”