C#:从Windows服务但未从控制台应用程序获取错误“无法创建Active X组件”

我有一个用c#编写的Windows服务,该服务一直在监听Azure中的一个事件中心。收到消息后,服务将处理该消息并执行一些执行和计算。

作为执行的一部分,它将启动一个名为AutoCal(公司自己的窗口的应用程序)的应用程序,该应用程序是类似于EXCEL的COM组件。

之前我有一个网络api,它执行相同的计算/执行。根据每个请求,它将打开AutoCal并进行一些处理。我已经在项目中添加了AutoCal dll作为参考。

打开AutoCal的代码类似:

(AutoCal.Application)Interaction.CreateObject("AutoCal.Application.NewInstance").

当我在本地测试时,它完全符合预期。但是,一旦将其托管在服务器上,它就会抛出一个错误消息:“无法创建activeX组件”。为了解决这个问题,我已授予向IIS应用程序池打开COM组件的权限。这解决了我的问题。

现在,我有一个Windows服务,该服务也可以打开AutoCal,从哪里可以授予CO组件权限。我已经搜索过了,但是到处都有解决方案,仅适用于ASP.net。

如何为Windows服务更正此问题。在这方面的任何帮助将非常有用。谢谢。

PS:当我在控制台应用程序中编写了相同的代码时,它工作正常。

qq290868393 回答:C#:从Windows服务但未从控制台应用程序获取错误“无法创建Active X组件”

没有确切的错误日志(您可以尝试在EventViewer中查找相关的错误吗?)很难说出问题是什么。

但是我会尝试以下方法:

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

您会看到类似的内容

DCOM Config

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

它看起来像这样(不用管图片中标签的标题,在您的情况下,它应该类似于AutoCal):

COM object properties

如果显示为灰色(例如我的情况),则可以使用以下过程来更改系统上的设置,并使此选项卡可配置:

  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 Control组和您选择的所有者选择Administrators
  8. 转到Start > Run。搜索services。 查找COM+ System Application。右键单击该服务,然后单击Restart

Registry tempering

一旦启用了Security标签,就可以更改COM对象的权限。例如-您可以允许运行您的服务的用户访问或激活此COM对象。

我希望这对您有所帮助,但同样,没有任何其他错误信息-这是一个漫长的尝试。

,

您将要在NETWORK SERVICE下运行它,但这不是问题。

您遇到的所有情况都汇总在 KB257757 下。

Considerations for server-side Automation of Office

您最好的选择是将其重写为.Net。如果它是基本的并且您不使用XML,那么值得尝试一下该格式。过去,我们必须确保每个人(我们所有的客户)都使用MS Office 2003(原来IBM是2002年的唯一产品,并且有一个2002的插件可以读取2003)。

我知道这不好,很抱歉成为坏消息的承担者。

微软的立场:

大多数服务器端自动化任务涉及文档创建或编辑。 Office 2007支持新的Open XML文件格式,使开发人员可以在服务器端创建,编辑,读取和转换文件内容。这些文件格式使用Microsoft .NET 3.x Framework中的System.IO.Package.IO命名空间来编辑Office文件,而无需使用Office客户端应用程序本身。这是处理服务中Office文件更改的推荐和受支持的方法。

本文链接:https://www.f2er.com/2772871.html

大家都在问