首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >托管在从COM可见的Windows中的ServicedComponent

托管在从COM可见的Windows中的ServicedComponent
EN

Stack Overflow用户
提问于 2015-10-02 13:30:39
回答 1查看 280关注 0票数 3

我正在迁移一个托管COM对象的旧的C++ Windows。我成功地创建了一个.Net Windows和一个COM可见服务组件,但只能在单独的项目中创建。

我需要的是我们的遗留应用程序能够通过COM接口创建我的新对象的实例;这些对象将托管在可以通过"Services“管理工具(启动、延迟启动、暂停、恢复、停止)管理的Windows Service流程中。它必须是Windows服务还有其他原因:

  • 在任何给定的时间,必须只有一个全系统的流程实例。
  • 它必须使用很长时间,因为它保存静态数据并对其执行后台处理.
  • 在实例化第一个COM对象之前,它应该是活动的。
  • 它应该由第一个COM对象自动启动,如果该对象因任何原因而在当时停止,则实例化它。
  • 对象实例将在服务进程中运行。
  • 使用网络服务标识运行。
  • 客户端不会升级/修改。

所有这些要点都由VisualWeb6.0中的旧"COM服务“结构很好地涵盖了,但是使用C++框架4,我不知道如何做到这一点。

也许我可以以某种方式合并.Net Windows和服务组件,或者有其他方法在我的Windows中公开类。

编辑:

我忘记提到我需要它成为标准Windows服务的一个重要原因:它必须能够执行一些相当长的任务时,它将被停止。客户端将委托COM对象在后台执行任务。如果服务过早停止,这些任务中的一些将被留待完成。只要服务能够执行一些清理过程(插入、更新等),就可以了。可能需要从零到十秒钟或更长的时间。它不需要防弹(它不会),但正常的系统关闭或维护服务停止不能留下未保存的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-26 22:51:46

由于.NET服务组件是由COM+ (实际上是dllhost.exe)托管的库,因此必须实现IProcessInitializer才能启动进程和关闭事件。

要延长Service等待服务启动的时间,可以通过从IProcessControlInit转换对象来使用IProcessInitializer.Startup

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32908309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档