首页 文章

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

提问于
浏览
2

我创建了一个尝试启动应用程序的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类型) ,Boolean publicOnly,Boolean noCheck,Boolean&canBeCached,RuntimeMethodHandle&ctor,Boolean&bNeedSecurityCheck)System.RuntimeType.CreateInstanceSlow(Boolean publicOnly,Boolean fillCache),System.RuntimeType.CreateInstanceImpl(Boolean publicOnly,Boolean skipVisibilityChecks,Boolean fillCache),位于System.Activator . CATIA.CATIA.GetApplicationObject(String ProgId)中的CreateInstance(Type type,Boolean nonPublic)

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

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

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

知道是什么导致了这个吗?

1 回答

  • 3

    我现在找到了解决方案 .

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

    • 点击运行

    • 输入dcomcnfg

    • 浏览组件服务>计算机>我的电脑> DComConfig>

    • 然后在我的案例"CATIA Application"找到你的申请 .

    • 右键单击>属性

    • 转到"Identity"标签

    • 将应该运行此应用程序的用户从"The launching user"更改为"The interactive user" .

    现在它对我有用 . 如果我先手动启动它,我仍然无法捕获进程(GetActiveObject) . 但至少服务设法启动一个没有任何错误的新实例 .

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

相关问题