我正在迁移托管COM对象的旧C ++ Windows服务。我设法创建了.Net Windows服务和COM可见服务组件,但只在单独的项目中。
我需要的是我们的遗留应用程序能够通过COM接口创建我的新对象的实例;这些对象应托管在Windows服务进程中,可以通过“服务”管理工具进行管理(启动,延迟启动,暂停,恢复,停止)。还有其他原因必须是Windows服务:
所有这些都很好地涵盖了Visual C ++ 6.0中旧的“COM服务”构造,但是使用VB.Net Framework 4我不知道该怎么做。
也许我可以以某种方式合并.Net Windows服务和服务组件,或者可能有其他方法在我的Windows服务中公开类。
编辑:
我忘了提到一个重要的原因,我需要它作为一个标准的Windows服务:它必须能够在它将要停止时执行一些相当冗长的任务。客户端将委托COM对象执行要在后台执行的任务。如果服务提前停止,其中一些任务将被撤消。只要服务可以执行一些清理程序(插入,更新等),这可能需要从无到十秒或更长时间,这是可以的。它不需要是防弹(它不会),但正常的系统关闭或维护服务停止不得留下不守的东西。
答案 0 :(得分:2)
由于.NET服务组件是由COM +(实际上是dllhost.exe)托管的库,因此必须实现IProcessInitializer
才能拥有进程启动和关闭事件。
要延长服务控制管理器等待服务启动的时间,您可以通过从IProcessInitializer.Startup
转换对象来使用IProcessControlInit
。