c# - 从 Windows 服务而不是控制台应用程序获取错误“无法创建 Active X 组件”
问题描述
我有一个用 c# 编写的 Windows 服务,它一直在监听 Azure 中的一个事件中心。一旦收到消息,服务就会处理消息并进行一些执行和计算。
作为执行的一部分,它会启动一个名为 AutoCal 的应用程序(公司自己的窗口应用程序),它是类似于 Excel 的 COM 组件。
早些时候,我有一个执行相同计算/执行的 web api。在每次请求时,它都会打开 AutoCal 并进行一些处理。我在项目中添加了 AutoCal DLL 作为参考。
打开 AutoCal 的代码类似:
(AutoCal.Application)Interaction.CreateObject("AutoCal.Application.NewInstance").
当我在本地对此进行测试时,它完全符合预期。但是一旦我在服务器上托管它,它就会抛出一个错误,说“无法创建 ActiveX 组件”。为了纠正这个问题,我已经允许将 COM 组件打开到 IIS 的应用程序池。这解决了我的问题。
现在我有一个也打开 AutoCal 的 Windows 服务,我从哪里授予 CO 组件权限。我已经搜索过了,但到处都是解决方案仅适用于 ASP.net。
如何纠正 Windows 服务的这个问题?
PS:当我在控制台应用程序中编写相同的代码时,它工作正常。
解决方案
如果没有准确的错误日志(您可以尝试在 EventViewer 中查找相关错误吗?),很难说出问题所在。
但我会尝试以下方法:
- 在开始菜单中输入
Component services
并打开它(右键单击 - 以管理员身份!) - 转到
Component services -> My Computer -> DCOM Config
文件夹
你会看到这样的东西
- 在树中找到您的 COM 应用程序。
- 右键单击它,打开属性,转到
Security Tab
它看起来像这样(不要介意图片中选项卡的标题,在你的情况下它应该是这样的AutoCal
):
如果它是灰色的,就像我的情况一样,您可以使用以下过程更改系统上的设置,并使此选项卡可配置:
- 去
Start > Run
。进入regedit
- 转到与您要管理的 DCOM 组件关联的键:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppID\{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}
- 右键单击它。选择
Permissions
- 点击
Advanced
- 将所有者更改为
Administrator
您的用户帐户 - 点击
OK
- 为您选择
Full Control
的Administrators
组和所有者选择 - 去
Start > Run
。搜索services
。找到COM+ System Application
。右键单击服务,然后单击Restart
启用选项卡后,您Security
可以更改 COM 对象的权限。例如 - 您可以允许运行您的服务的用户访问或激活此 COM 对象。
我希望这对您有所帮助,但同样,没有任何额外的错误信息 - 这是一个很长的镜头。
推荐阅读
- nginx - kubernetes nginx-ingress 总是重定向到 404 默认后端忽略路径规则
- c# - Visual Studio 2010 到 Visual Studio 2015 WorkItemStore
- pyspark - 从 PySpark 中的月份和年份字符串列创建时间戳
- sql - 如何对两个 SQL 查询使用 IF 或 CASE JOINED 遍历每条记录
- javascript - 如何在 NodeJS 中运行函数并向客户端发送响应?
- c++ - windows.h 的 C++ 问题,在 vs17 中非法声明匿名“结构”
- php - Laravel 新错误显示包(Ignition)导致共享主机出错
- c# - 有没有办法用openxml制作一个只读段落?
- dask - 能够锁定 dask 工作人员,直到某些后期任务/步骤完成
- hadoop - Hadoop:在 hadoop 命令中使用 wikipediaminer jar 文件时出错