c# - 自 KB4338419 起,C# COM 对象无法再从经典 ASP 创建
问题描述
我们最近在一个依赖于一组 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 对象的实例化或访问方式进行了一些安全更改,可以理解的是,没有详细说明,我可以相信我们做错了什么或没有做现在认为必不可少的事情,但我找不到任何建议我们应该做什么的信息!
您的帮助将不胜感激!蒂姆
解决方案
推荐阅读
- php - 无法使用用户名和密码连接到数据库
- java - 在JavaFX中同时进行场景和舞台交互
- javascript - 编码建议:dom 操作 - 将文本拆分为动态范围
- laravel - 在 Laravel 中单击更改页面的一部分
- php - 首先用它的字符串替换变量,然后执行 `if` 检查
- javascript - JQuery 运行双重请求路由
- c# - 值不能为空。参数名称:实例
- eclipse - 配置 Eclipse/PyDev 以使用远程服务器和远程解释器上的项目(解决方法和陷阱)
- angularjs - Intellij 使用 angularjs 检查不需要的警告
- php - 由于 composer.json 在苗条树框架中的致命错误