由于KB4338419,无法再从经典ASP创建C#COM对象

由于KB4338419,无法再从经典ASP创建C#COM对象,c#,iis,asp-classic,C#,Iis,Asp Classic,我们最近在一个依赖一组C#COM组件的经典ASP应用程序中遇到了一个问题,我们发现KB4338419中引入的更改破坏了我们的某些功能 我们已将问题归结为以下要点: 创建了最简单的C#COM库: using System; using System.Runtime.InteropServices; namespace TestComObject { [ComVisible(true)] [Guid("B5C7370F-0EB5-4279-885C-9C169F9CBAA5")]

我们最近在一个依赖一组C#COM组件的经典ASP应用程序中遇到了一个问题,我们发现KB4338419中引入的更改破坏了我们的某些功能

我们已将问题归结为以下要点:

创建了最简单的C#COM库:

using System;
using System.Runtime.InteropServices;

namespace TestComObject
{
    [ComVisible(true)]
    [Guid("B5C7370F-0EB5-4279-885C-9C169F9CBAA5")]
    [ClassInterface(ClassInterfaceType.None)]
    public class Class1
    {
        public string GetString()
        {
            return Guid.NewGuid().ToString("D");
        }
    }
}
使用RegAsm/codebase在服务器上注册

创建了最简单的ASP脚本来使用它:

<%
    Const COM_OBJECT_NAME = "TestComObject.Class1"
    Dim co
    Set co = Server.CreateObject(COM_OBJECT_NAME)
    Response.Write co.GetString()
%>
web应用程序在IIS(8)中运行,并使用专用的非特权用户帐户。(真实的)代码多年来一直运行良好,权限有限。 如果我将用户添加到Administrators组,COM对象将被实例化。作为普通用户,页面/代码会失败。如果我将progID更改为非.Net库,则一切正常

文件系统权限正常。如果我编写一个.vbs等价物并以非特权用户的身份执行,那么一切都会正常工作

这篇文章暗示,对.Net COM对象的实例化或访问方式进行了一些安全性更改,可以理解,没有详细说明,我可以相信我们做了一些错误的事情,或者没有做一些现在认为必要的事情,但我找不到任何信息表明我们应该做什么

谢谢你的帮助!
Tim

请查看更改匿名用户以匹配应用程序池身份是否可以解决问题:


为什么要回答一个明显重复的问题?@Lankymart没有足够的声誉将其标记为重复。。。当我正在截图发布时,你已经标记了它。这个解决方法对我们不起作用。此外,在安装了7月份的Windows Update之后,我们无法再重新启动www服务。如果我们尝试,服务将永远锁定在“停止”模式,我们必须重新启动服务器。我们不得不卸载7月份Windows更新中的所有KB来修复所有这些混乱。KB4284815、KB4338815、KB4338424、KB4338419、KB4054566我在前面的评论中提到的www服务重启问题似乎与此问题有关。请检查此线程:@Lankymart这不完全是一个重复,因为它引用了与Microsoft不同的KB“病毒”。@Lankymart-同意,这是相同的问题和原因,尽管我的情况与中的其他人相同。作为记录,我们运行的是64位而不是32位,为了访问网络共享和数据库,我们必须以特定的用户身份运行我们的网站和应用程序池。这里有同样的问题。可能有更多信息:
Microsoft VBScript runtime error '800a01ad'

ActiveX component can't create object

/Default.asp, line 4