启动应用程序时,C#Windows服务COM异常80080005
本文关键字:COM 异常 80080005 服务 C#Windows 应用程序 启动 | 更新日期: 2023-09-27 18:29:29
我创建了一个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,布尔noCheck,布尔&canBeCached,运行时方法句柄&ctor,布尔&bNeedSecurityCheck)System.RuntimeType.CreateInstanceSlow(布尔型publicOnly,布尔型fillCache)在System.RuntimeType.CreateInstanceImpl(布尔值publicOnly、布尔skipVisibilityChecks、布尔fillCache)位于的System.Activator.CreateInstance(类型类型,布尔非公共)CATIA.CIA.GetApplicationObject(字符串ProgId)
重要提示:当我将此代码作为Windows应用程序而不是Windows服务运行时,一切都很正常。我也试着先启动CATIA并让它在后台运行,但我的服务无法捕捉到它。
我使用本地系统运行服务,并选中了"与桌面交互"框。
我的ProgId是CATIA.Application,正如我所说,当我将其作为应用程序而不是服务运行时,它就可以工作。
知道是什么原因造成的吗?
我现在找到了一个解决方案。
我在另一个论坛上发现了它,有人在网上运行另一个应用程序时遇到了问题。奇怪的是,这个解决方案对我也有效。
- 点击运行
- 输入dcomcnfg
- 浏览组件服务>计算机>我的电脑>DComConfig>
- 然后找到你的应用程序,在我的案例中是"CATIA应用程序"
- 右键单击>属性
- 转到"标识"选项卡
- 将应该运行此应用程序的用户从"启动用户"更改为"交互式用户"
现在它对我有效。如果我先手动启动它,我仍然无法捕获进程(GetActiveObject)。但至少服务能够在没有任何错误的情况下启动一个新实例。
我认为这对很多在尝试从Windows服务启动应用程序时遇到此错误消息的人来说会有所帮助。