【问题标题】:From a COM Service EXE gets started从 COM 服务 EXE 开始
【发布时间】:2014-04-17 05:02:04
【问题描述】:

我正在尝试编写我的第一个 COM 服务 EXE。而且我在网上找不到一些信息。

Service EXE 从其Run() 方法开始执行,我需要在其中实现我的主要功能以使我的服务正常工作还是我需要实现与之相关的特定功能?

非常感谢!!

【问题讨论】:

  • 提供 COM 对象是这项服务的重点吗?如果是这样,我是否可以建议将其实现为进程内 COM 服务器(即 DLL)并在 COM+ 中运行它?这要容易得多。

标签: c++ service com atl


【解决方案1】:

你没有说你使用的是C++和ATL,但是可以从给问题的标签中猜到。

如果您的 COM 对象不需要任何全局初始化,则您不必修改提供的 Run() 函数或类似的任何东西。它的工作原理是这样的:如果服务没有运行,并且某些程序需要从您的服务中创建一个 COM 对象,则 COM/DCOM 基础结构首先启动该服务。或者,您可以使用任何标准方式(例如手动或将其启动类型设置为自动)预启动服务。服务运行后,将在服务中创建 COM 对象。

因此,无需额外的全局初始化,您只需像在任何本地服务器或进程内服务器中一样实现您的 COM 对象。如果他们需要任何实例初始化,你将把它放到 COM 对象的构造函数中,或者放到它的 FinalConstruct 方法中(这个方法在构造函数之后被调用,所以你可以利用对象已经存在的事实,并且你可以如果需要,也会失败,因为 FinalConstruct 返回 HRESULT)。

如果你需要一个全局(服务范围)的初始化代码,那么你可以把它放在几个地方,每个地方都在服务构建的不同阶段。这样的地方之一就是 Run() 方法,是的。

【讨论】:

  • 对不起,如果我提到了足够的信息。事实上,我正在尝试使用 ATL 构建服务 EXE。该服务需要在计算机启动时运行并循环运行其主要进程。那么我是否只需要在 Run() 方法中实现我的主进程?我无法理解您对FinalConstruct methodconstructor of a COM object 的解释。我在哪里可以找到它们?或者,我该如何添加它们?
  • 看起来您已选择使用“ATL 项目”向导实现 Windows 服务,但实际上您不需要实现任何 COM 对象(与原始问题有些相反)。在给出答案之前需要澄清这一点。
猜你喜欢
  • 2011-06-23
  • 2011-11-10
  • 2023-03-25
  • 2010-10-28
  • 2016-06-20
  • 2011-03-13
  • 2012-03-17
  • 2014-10-05
  • 1970-01-01
相关资源
最近更新 更多