C#Windows服务COMexception80080005启动应用程序时

我创build了一个尝试启动应用程序的Windows服务(在这种情况下是CATIA)。

我使用下面的代码:

private Application GetApplicationObject(string ProgId) { Application AppObject = null; //Try to get allready open instance of the Application try { AppObject = (Application)Marshal.GetActiveObject(ProgId); } catch { //Create a new instance of the Application instead AppObject = (Application)Activator.CreateInstance(Type.GetTypeFromProgID(ProgId)); } return AppObject; } 

我的服务尝试启动应用程序时出现以下错误:

System.Runtime.InteropServices.COMException(0x80080005):检索具有CLSID {87FD6F40-E252-11D5-8040-0010B5FA1031}的组件的COM类工厂失败,原因是以下错误:80080005.在System.RuntimeTypeHandle.CreateInstance(RuntimeType type,在System.RuntimeType.CreateInstanceSlow(布尔publicOnly,布尔fillCache)在System.RuntimeType.CreateInstanceImpl(布尔publicOnly,布尔skipVisibilityChecks,布尔fillCache)在System.Activator.CreateInstance布尔publicOnly,布尔noCheck,布尔&canBeCached,RuntimeMethodHandle&ctor,布尔&bNeedSecurityCheck) (Type type,Boolean nonPublic)at CATIA.CATIA.GetApplicationObject(String ProgId)

重要提示:当我作为Windows应用程序而不是Windows服务运行此代码时,一切正常。 我也试着先启动CATIA,并在后台运行,但我的服务无法捕捉到它。

我使用本地系统运行服务,并选中了“与桌面交互”框。

我的ProgId是CATIA.Application,正如我所说的,当它作为一个应用程序而不是一个服务来运行时。

任何想法是什么造成这个?

我现在找到了一个解决方案。

我在另一个论坛中发现了这个问题,有人通过网络运行另一个应用程序的问题。 奇怪的是,这个解决方案也适用于我。

  1. 点击运行
  2. 输入dcomcnfg
  3. 浏览组件服务>计算机>我的电脑> DComConfig>
  4. 然后找到你的应用程序,在我的情况下“CATIA应用程序”。
  5. 右键单击>属性
  6. 转到“身份”选项卡
  7. 将运行此应用程序的用户从“启动用户”更改为“交互式用户”。

现在它适用于我。 我仍然无法赶上进程(GetActiveObject),如果我先手动启动它。 但是至少服务管理员没有任何错误地开始一个新的实例。

我认为这对于很多在尝试从Windows服务启动应用程序时遇到此错误消息的人会有所帮助。