3

我有一个 C# Web 服务,它调用 COM 对象来访问 FileNet 成像系统。该服务在调用 FileNet COM 对象时偶尔会遇到以下错误:

System.Runtime.InteropServices.COMException (0x80040005):需要运行对象才能执行此操作(来自 HRESULT 的异常:0x80040005 (OLE_E_NOTRUNNING))

关于这意味着什么或如何解决它的任何想法?用谷歌搜索时几乎找不到任何东西,而且我对 COM 的经验非常有限。谢谢。

4

2 回答 2

2

不幸的是,HRESULT 是“出错了”的错误代码。我会建议:

  1. 检查系统和应用程序事件日志以查看是否记录了更好的错误消息
  2. 检查您的 COM 组件的任何特定于应用程序的错误日志

如果这些都没有进一步说明出了什么问题,您可能需要考虑将您的 COM 程序集添加到组件服务包中。这应该让您可以更轻松地关闭它并重新启动它,而无需重新启动系统。

取决于操作系统(这是来自 Windows 7,但大多数是相似的):

  1. 启动组件服务(通常在管理工具下)
  2. 深入到组件服务、计算机、我的电脑、COM+ 应用程序。
  3. 右键单击以添加新应用程序。
  4. 选择创建一个空的应用程序。这将让您选择要在此处运行的 COM 组件。
  5. 为应用程序命名
  6. 如果您对 COM 组件不太了解,我建议您选择一个服务器应用程序来启动。这将为调用者在进程外启动它。如果这不起作用(例如调用失败等),请删除此应用程序并作为库应用程序重试。
  7. 选择服务的凭据。网络服务可能是最安全的选择(例如最少的权限),但我不知道您的要求是什么。如果它正在访问硬件或其他类似的东西,您可能需要提供域帐户或 LocalSystem。
  8. 完成向导(如果需要更多控制,可能需要重新访问这些)。
  9. 深入了解您的新应用程序并找到 Components 文件夹。
  10. 右键单击并选择新建组件
  11. 如果 COM 控件已注册,请选择 Import components。如果没有,请选择安装组件
  12. 现在选择您关心的组件。请注意,将所有相互关联的组件放入同一个应用程序中是相当重要的。否则,较旧的 COM 程序集不太可能正常工作
  13. 完成向导。如果您返回到树视图的 COM+ 应用程序级别,您应该会看到您的新应用程序,带有一个非动画图标。

调用代码不应该有任何必要的更改。向您的服务发出请求并返回到管理器...一旦 COM+ 应用程序启动,您应该会看到该图标动画。如果您愿意,您还应该能够从这里重新启动它。

有很多关于降速时间和池的配置选项,例如,如果您发现 COM DLL 仅在一段时间后出现问题,这可能会对您有所帮助。

于 2010-02-26T11:23:24.370 回答
0

如果问题确实是间歇性的,有时会发生在一台机器上,有时不会 - 您可以编写代码来捕获错误,然后再试一次。

如果有机器无法正常工作,可能是由于其他问题,例如 UAC,或组件未正确安装。

于 2010-02-25T00:01:01.023 回答