如何:以编程方式编写服务

注意

本文不适用于 .NET 中的托管服务。 有关使用 Microsoft.Extensions.Hosting.BackgroundService 的 Windows 服务上的最新内容和辅助角色服务模板,请参阅:

如果选择不使用 Windows 服务项目模板,则可以通过自行设置继承和其他基础结构元素来编写自己的服务。 当以编程方式创建服务时,必须执行以下几个步骤(否则,模板将为你处理):

  • 必须将服务类设置为从 ServiceBase 类继承。

  • 必须为服务项目创建 Main 方法,该方法定义要运行的服务并在其上调用 Run 方法。

  • 必须替代 OnStartOnStop 过程并填入你希望它们运行的任何代码。

以编程方式编写服务

  1. 创建一个空项目并通过以下步骤创建对必要命名空间的引用:

    1. 在“解决方案资源管理器” 中,右键单击“引用” 节点,然后单击 “添加引用”。

    2. 在“.NET Framework” 选项卡上,滚动到“System.dll” ,然后单击“选择” 。

    3. 滚动到“System.ServiceProcess.dll” ,然后单击“选择” 。

    4. 单击 “确定”

  2. 添加一个类并将其配置为从 ServiceBase 继承:

    public class UserService1 : ServiceBase
    {
    }
    
    Public Class UserService1
        Inherits System.ServiceProcess.ServiceBase
    End Class
    
  3. 添加下面的代码来配置服务类:

    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
    
  4. 为类创建 Main 方法,并用它来定义类将包含的服务;userService1 是类的名称:

    public static void Main()
    {
        ServiceBase.Run(new UserService1());
    }
    
    Shared Sub Main()
        System.ServiceProcess.ServiceBase.Run(New UserService1)
    End Sub
    
  5. 替代 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
    
  6. 替代要为其定义自定义处理进程的任何其他方法,并编写代码以确定服务在每种情况下应采取的操作。

  7. 添加服务应用程序所必需的安装程序。 有关详细信息,请参阅如何:将安装程序添加到服务应用程序

  8. 通过从“生成” 菜单选择“生成解决方案” 来生成项目。

    注意

    不要通过按 F5 来运行你的项目 — 你无法通过这种方式运行服务项目。

  9. 创建安装项目和自定义操作以安装服务。 有关示例,请参阅演练:在组件设计器中创建 Windows 服务应用程序

  10. 安装服务。 有关详细信息,请参阅如何:安装和卸载服务

请参阅