C# 从.Net的角度看windows服务的体系结构

C# 从.Net的角度看windows服务的体系结构,c#,.net,windows,winapi,service,C#,.net,Windows,Winapi,Service,多个windows服务可以共享一个进程。在C#中,它们将从以下内容开始: ServiceBase.Run(new MyService1(), new MyService2()); 调用run方法会阻塞执行main()的线程。同时处理服务的事件。那么他们在哪里被处决 他们是否在“主”进程中使用异步过程调用,该进程不仅被阻塞,而且处于可报警等待状态?如果是这样的话,为多个服务共享一个进程在性能上就有缺陷。处理程序是否在单独的线程中运行?它们是否在包含Run()调用的进程之外执行?您可能追求的是wi

多个windows服务可以共享一个进程。在C#中,它们将从以下内容开始:

ServiceBase.Run(new MyService1(), new MyService2());
调用run方法会阻塞执行
main()
的线程。同时处理服务的事件。那么他们在哪里被处决


他们是否在“主”进程中使用异步过程调用,该进程不仅被阻塞,而且处于可报警等待状态?如果是这样的话,为多个服务共享一个进程在性能上就有缺陷。处理程序是否在单独的线程中运行?它们是否在包含
Run()
调用的进程之外执行?

您可能追求的是windows服务体系结构以及服务应用程序在其中的集成方式

MSDN中已经有一篇关于这个主题的非常好的文章

它不仅解释了Windows如何与服务交互,服务数据库如何工作(至少部分)


本文还解释了操作系统服务的工作原理,并对IIS(Internet信息服务)中的托管服务给出了一些提示。

在Windows中,多个服务可以使用服务类型共享一个进程。NET必须使用此服务类型在Windows上的单个进程中注册多个服务

每个注册的服务都有一个名称和由结构表示的本机入口点地址。NET应为传递给
ServiceBase的每个服务构造一个
SERVICE\u TABLE\u条目
。运行
方法,并使用这些信息调用
StartServiceCtrlDispatcher
函数


要接收有关服务状态的通知,入口点(
ServiceMain
ServiceBase
类实现)必须调用以接收通知。这些通知使用APCs发送。作为补充说明,API还使用APC。

您问了7个问题。“你得把它缩减为一个。”汉帕桑的问题2-5只是对第一个问题的澄清。我删除了6,7。