如何:以编程方式编写服务
注意
本文不适用于 .NET 中的托管服务。 有关使用 Microsoft.Extensions.Hosting.BackgroundService 的 Windows 服务上的最新内容和辅助角色服务模板,请参阅:
如果选择不使用 Windows 服务项目模板,则可以通过自行设置继承和其他基础结构元素来编写自己的服务。 当以编程方式创建服务时,必须执行以下几个步骤(否则,模板将为你处理):
必须将服务类设置为从 ServiceBase 类继承。
必须为服务项目创建
Main
方法,该方法定义要运行的服务并在其上调用 Run 方法。
以编程方式编写服务
创建一个空项目并通过以下步骤创建对必要命名空间的引用:
在“解决方案资源管理器” 中,右键单击“引用” 节点,然后单击 “添加引用”。
在“.NET Framework” 选项卡上,滚动到“System.dll” ,然后单击“选择” 。
滚动到“System.ServiceProcess.dll” ,然后单击“选择” 。
单击 “确定” 。
添加一个类并将其配置为从 ServiceBase 继承:
public class UserService1 : ServiceBase { }
Public Class UserService1 Inherits System.ServiceProcess.ServiceBase End Class
添加下面的代码来配置服务类:
public UserService1() { ServiceName = "MyService2"; CanStop = true; CanPauseAndContinue = true; AutoLog = true; }
Public Sub New() Me.ServiceName = "MyService2" Me.CanStop = True Me.CanPauseAndContinue = True Me.AutoLog = True End Sub
为类创建
Main
方法,并用它来定义类将包含的服务;userService1
是类的名称:public static void Main() { ServiceBase.Run(new UserService1()); }
Shared Sub Main() System.ServiceProcess.ServiceBase.Run(New UserService1) End Sub
替代 OnStart 方法,并定义服务启动时想要执行的任何处理进程。
protected override void OnStart(string[] args) { // Insert code here to define processing. }
Protected Overrides Sub OnStart(ByVal args() As String) ' Insert code here to define processing. End Sub
替代要为其定义自定义处理进程的任何其他方法,并编写代码以确定服务在每种情况下应采取的操作。
添加服务应用程序所必需的安装程序。 有关详细信息,请参阅如何:将安装程序添加到服务应用程序。
通过从“生成” 菜单选择“生成解决方案” 来生成项目。
注意
不要通过按 F5 来运行你的项目 — 你无法通过这种方式运行服务项目。
创建安装项目和自定义操作以安装服务。 有关示例,请参阅演练:在组件设计器中创建 Windows 服务应用程序。
安装服务。 有关详细信息,请参阅如何:安装和卸载服务。