启动应用程序时,C#Windows服务COM异常80080005

时间:2013-08-28 09:51:49

标签: c# windows service catia

我创建了一个尝试启动应用程序的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的组件的COM类工厂   {87FD6F40-E252-11D5-8040-0010B5FA1031}因以下原因失败   错误:80080005。在   System.RuntimeTypeHandle.CreateInstance(RuntimeType类型,布尔值   publicOnly,Boolean noCheck,Boolean& canBeCached,   RuntimeMethodHandle&安培; ctor,布尔& bNeedSecurityCheck)at   System.RuntimeType.CreateInstanceSlow(Boolean publicOnly,Boolean   fillCache)在System.RuntimeType.CreateInstanceImpl(Boolean   publicOnly,Boolean skipVisibilityChecks,Boolean fillCache)at   System.Activator.CreateInstance(Type type,Boolean nonPublic)at   CATIA.CATIA.GetApplicationObject(String ProgId)

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

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

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

知道造成这种情况的原因是什么?

1 个答案:

答案 0 :(得分:3)

我现在找到了解决方案。

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

  1. 点击运行
  2. 输入dcomcnfg
  3. 浏览组件服务>计算机>我的电脑> DComConfig>
  4. 然后找我的应用程序,在我的案例中为“CATIA Application”。
  5. 右键单击>属性
  6. 转到“身份”标签
  7. 将应该运行此应用程序的用户从“启动用户”更改为“交互式用户”。
  8. 现在它对我有用。如果我先手动启动它,我仍然无法捕获进程(GetActiveObject)。但至少服务设法启动一个没有任何错误的新实例。

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