多个Windows服务可以共享一个进程。在C#中,他们将以:
开头ServiceBase.Run(new MyService1(), new MyService2());
run方法的调用阻塞main()
执行的线程。同时处理服务事件。那他们在哪里执行?
他们是否在" main"中使用异步过程调用?这个过程不仅被阻止而且处于警惕等待状态?如果是这样的话,共享多个服务的过程在性能上有缺点。处理程序是否在单独的线程中运行?它们是否在包含Run()
电话的流程之外执行?
答案 0 :(得分:0)
您可能会追求的是Windows服务架构以及服务应用程序如何集成在其中。
MSDN中已有一篇关于该主题的非常好的文章,which can be found here.
它不仅解释了Windows如何与服务交互,服务数据库如何工作(至少部分)。
本文还解释了操作系统服务的工作原理,并对IIS中的托管服务(Internet信息服务)提供了一些提示。
答案 1 :(得分:0)
在Windows中,多个服务可以使用SERVICE_WIN32_SHARE_PROCESS服务类型共享单个进程。 .NET必须使用此服务类型在Windows上的单个进程中注册多个服务。
每个注册的服务都有一个名称和一个由SERVICE_TABLE_ENTRY结构表示的本地入口点地址。 .NET应为传递给SERVICE_TABLE_ENTRY
方法的每个服务构造ServiceBase.Run
,并使用这些信息调用StartServiceCtrlDispatcher
函数。
要接收有关服务状态的通知,入口点(ServiceMain
类实施的ServiceBase
)必须致电RegisterServiceCtrlHandlerEx以接收通知。这些通知使用APC发送。另外,NotifyServiceStatusChange API也使用了APC。