首页 > 解决方案 > 从 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:当我在控制台应用程序中编写相同的代码时,它工作正常。

标签: c#comactivex

解决方案


如果没有准确的错误日志(您可以尝试在 EventViewer 中查找相关错误吗?),很难说出问题所在。

但我会尝试以下方法:

  1. 在开始菜单中输入Component services并打开它(右键单击 - 以管理员身份!)
  2. 转到 Component services -> My Computer -> DCOM Config文件夹

你会看到这样的东西

DCOM 配置

  1. 在树中找到您的 COM 应用程序。
  2. 右键单击它,打开属性,转到Security Tab

它看起来像这样(不要介意图片中选项卡的标题,在你的情况下它应该是这样的AutoCal):

COM 对象属性

如果它是灰色的,就像我的情况一样,您可以使用以下过程更改系统上的设置,并使此选项卡可配置:

  1. Start > Run。进入regedit
  2. 转到与您要管理的 DCOM 组件关联的键:HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppID\{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}
  3. 右键单击它。选择Permissions
  4. 点击Advanced
  5. 将所有者更改为Administrator您的用户帐户
  6. 点击OK
  7. 为您选择Full ControlAdministrators组和所有者选择
  8. Start > Run。搜索services。找到COM+ System Application。右键单击服务,然后单击Restart

注册表回火

启用选项卡后,您Security可以更改 COM 对象的权限。例如 - 您可以允许运行您的服务的用户访问或激活此 COM 对象。

我希望这对您有所帮助,但同样,没有任何额外的错误信息 - 这是一个很长的镜头。


推荐阅读