自KB4338419

时间:2018-07-12 16:50:20

标签: c# iis asp-classic

我们最近在依赖于一组C#COM组件的Classic 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()
%>

访问页面时,我们看到:

Microsoft VBScript runtime error '800a01ad'

ActiveX component can't create object

/Default.asp, line 4

Web应用程序以专用的非特权用户帐户在IIS(8)中运行。 (真实的)代码已经运行了好几年了,并且特权有限。 如果将用户添加到Administrators组,则将实例化COM对象。作为普通用户,页面/代码将失败。如果我将progID更改为非.Net库,则一切正常

文件系统权限很好。如果我编写等效的.vbs并以非特权用户身份执行,则一切正常。

KB4338419的文章暗示对.Net COM对象的实例化或访问方式进行了一些安全性更改,并且可以理解的是,没有涉及太多细节,我可以相信我们做错了什么或没有做现在被认为必不可少的事情,但是我找不到任何提示我们应该做的信息!

您的帮助将不胜感激! 蒂姆

1 个答案:

答案 0 :(得分:6)

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

enter image description here