自KB4338419更新后,为何Classic ASP无法再创建连接?
- 内容介绍
- 文章标签
- 相关推荐
本文共计528个文字,预计阅读时间需要3分钟。
在安装了Windows更新KB4340558后,如何在经典ASP中正确实例化32位COM对象?以下是一种解决方案:
1. 在经典ASP应用程序中,确保已正确注册所需的COM组件。
2.在ASP页面中,使用`Server.CreateObject`方法来创建COM对象实例。
3.使用`Set`语句将创建的对象赋给一个变量。
4.在使用COM对象之前,确保已正确设置其属性和方法。
示例代码如下:
asp
请将`YourCOMComponent`替换为实际的COM组件名称,并将`MethodName`替换为需要调用的方法。
参见英文答案 > How do I properly instantiate 32-bit COM objects in classic ASP after installing Windows Update KB4340558?5个我们最近在Classic ASP应用程序中遇到了一个问题,它依赖于一组C#COM组件,并且已经确定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)中运行,位于专用的非priveleged用户帐户下. (实际)代码运行良好多年,权限有限.
如果我将用户添加到Administrators组,则实例化COM对象.作为普通用户,页面/代码失败.如果我将progID更改为non.Net库,一切正常
文件系统权限很好.如果我写一个.vbs等价物并作为非特权用户执行,一切正常.
KB4338419的文章暗示对.Net COM对象如何实例化或访问进行了一些安全性更改,并且可以理解的是没有详细说明,我可以相信我们做错了什么或者做了一些现在认为必不可少的事情,但我找不到任何暗示我们应该做的事情的信息!
非常感谢您的帮助!
蒂姆
本文共计528个文字,预计阅读时间需要3分钟。
在安装了Windows更新KB4340558后,如何在经典ASP中正确实例化32位COM对象?以下是一种解决方案:
1. 在经典ASP应用程序中,确保已正确注册所需的COM组件。
2.在ASP页面中,使用`Server.CreateObject`方法来创建COM对象实例。
3.使用`Set`语句将创建的对象赋给一个变量。
4.在使用COM对象之前,确保已正确设置其属性和方法。
示例代码如下:
asp
请将`YourCOMComponent`替换为实际的COM组件名称,并将`MethodName`替换为需要调用的方法。
参见英文答案 > How do I properly instantiate 32-bit COM objects in classic ASP after installing Windows Update KB4340558?5个我们最近在Classic ASP应用程序中遇到了一个问题,它依赖于一组C#COM组件,并且已经确定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)中运行,位于专用的非priveleged用户帐户下. (实际)代码运行良好多年,权限有限.
如果我将用户添加到Administrators组,则实例化COM对象.作为普通用户,页面/代码失败.如果我将progID更改为non.Net库,一切正常
文件系统权限很好.如果我写一个.vbs等价物并作为非特权用户执行,一切正常.
KB4338419的文章暗示对.Net COM对象如何实例化或访问进行了一些安全性更改,并且可以理解的是没有详细说明,我可以相信我们做错了什么或者做了一些现在认为必不可少的事情,但我找不到任何暗示我们应该做的事情的信息!
非常感谢您的帮助!
蒂姆

