【问题标题】:C# COM object can no longer be created from Classic ASP since KB4338419 [duplicate]自 KB4338419 以来,无法再从经典 ASP 创建 C# COM 对象 [重复]
【发布时间】:2018-07-12 16:50:19
【问题描述】:

我们最近在一个依赖于一组 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()
%>

访问页面时,我们看到:

Microsoft VBScript runtime error '800a01ad'

ActiveX component can't create object

/Default.asp, line 4

Web 应用程序在 IIS (8) 中运行,使用专用的非特权用户帐户。 (真实的)代码多年来一直运行良好,权限有限。 如果我将用户添加到管理员组,COM 对象将被实例化。作为普通用户,页面/代码失败。如果我将 progID 更改为非 .Net 库,一切正常

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

KB4338419 的文章暗示对 .Net COM 对象的实例化或访问方式进行了一些安全更改,可以理解的是,没有详细说明,我可以相信我们做错了什么或没有做现在被认为必不可少的东西,但我找不到任何建议我们应该做什么的信息!

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

【问题讨论】:

  • @lankymart - 同意,这是相同的问题和原因,尽管我的情况与the other question 中的其他人相同。作为记录,我们运行的是 64 位而不是 32 位,并且必须以特定用户身份运行我们的网站和应用程序池,才能访问网络共享和数据库。
  • 这里有同样的问题。可能有更多信息:serverfault.com/q/920671/362722

标签: c# iis asp-classic


【解决方案1】:

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

【讨论】:

  • 为什么要回答明显重复的问题?
  • @Lankymart 没有足够的声望将其标记为重复...虽然我正在制作屏幕截图以发布您已经标记它。
  • 此解决方法对我们不起作用。此外,在安装 7 月 Windows 更新后,我们无法再重新启动 www 服务。如果我们尝试,服务将永远锁定在“停止”模式,我们必须重新启动服务器。我们不得不从 7 月的 Windows 更新中卸载所有 KB 以修复所有这些混乱。 KB4284815、KB4338815、KB4338424、KB4338419、KB4054566
  • 我在之前的评论中提到的 www 服务重启问题似乎与这个问题有关。请检查此线程:forums.iis.net/t/…
  • @Lankymart 这并不完全是重复的,因为它引用了来自 Microsoft 的不同 KB“病毒”。
猜你喜欢
  • 2010-11-14
  • 2016-08-12
  • 2011-06-23
  • 1970-01-01
  • 1970-01-01
  • 2015-02-21
  • 2015-02-25
  • 2011-09-29
  • 2012-01-19
相关资源
最近更新 更多