c# - 从 ASP.NET 创建后期绑定 COM 对象时出现 IClassFactory 错误
问题描述
我正在 Windows Server 2016 上设置 ASP.NET 网站。该网站还使用以下 C# 代码创建 COM 对象的实例:
Type type = Type.GetTypeFromProgID(ProgID, Server, true);
dynamic object = Activator.CreateInstance(type);
但是,程序会在该行引发异常,Activator.CreateInstance
并显示以下错误:
Creating an instance of the COM component with CLSID {E2FB185E-F4D8-482A-B27B-A08BB4F9EAE9} from the IClassFactory failed due to the following error: 800a0005 Exception from HRESULT: 0x800A0005 (CTL_E_ILLEGALFUNCTIONCALL).
在 Server 2012 机器上安装时,我没有收到此错误。此外,如果我在应用程序池使用的同一用户帐户下将其作为 Window 应用程序运行,我可以在 2016 服务器上运行此代码而不会出错。
有没有人有什么建议?谢谢。
解决方案
好的,所以问题出在用 VB6 编写的 COM 对象中。潜在的错误是“无效的过程调用或参数”。该错误是由于缺少应用程序所需的系统环境变量而发生的。这些变量是在用户级别定义的,但不会为应用程序池使用的用户加载。
一旦我为系统添加了缺少的环境变量,错误就消失了。
推荐阅读
- javascript - Express 和 React Routes 如何处理来自浏览器的初始 GET 请求?
- ssl-certificate - Microsoft Exchange 2016 应用 SSL 证书
- javascript - 使动画在过渡后运行
- sql - 何时在 SQL Server 数据仓库中使用用户定义函数
- bigcommerce - 我在哪里可以通过 BigCommerce API 找到 tax_label 值?
- mysql - 为什么字符串在 MYSQL 数据库中最终无法读取?
- javascript - 如果字符串中的参数被空格分隔,如何解析参数
- python - 调用外部方法时,嵌套在方法中的 Python 字典会自动执行所有值(方法)
- javascript - 如何完全清除 WebRTC 连接?
- python - 当我从模块内部运行文件时,文件导入正在工作,但当我通过从外部导入模块来运行文件时却没有