C# 使用Topshelf快速创建Windows服务程序

前言:

Topshelf 用于将控制台应用程序封装成易于编写、调试和部署 的Windows 服务。它允许您使用简单的命令行语法创建和安装 Windows 服务,而无需编写繁琐的安装代码。

使用 Topshelf,您可以创建一个具有自定义启动行为、暂停和继续功能以及自定义命令行选项的 Windows 服务。它还可以将 Windows 服务作为控制台应用程序运行,以便在开发和调试时更容易地查看日志和其他输出。

总之,Topshelf 可以简化 Windows 服务的创建和管理,使其更易于使用和维护。

下面是Topshelf 的简单示例:

  1. 首先,您需要安装 Topshelf 库。可以使用 NuGet 包管理器来安装它,或者在 Visual Studio 中使用“管理 NuGet 包”对话框。
    1. 接下来,创建一个控制台应用程序,并添加对 Topshelf 的引用。然后,在 Program.cs 文件中编写以下代码:
    using System;
    using Topshelf;
    
    namespace MyWindowsService
    {
        class Program
        {
            static void Main(string[] args)
            {
                HostFactory.Run(x =>
                {
                    x.Service<MyService>(s =>
                    {
                        s.ConstructUsing(name => new MyService());
                        s.WhenStarted(tc => tc.Start());
                        s.WhenStopped(tc => tc.Stop());
                    });
                    x.RunAsLocalSystem();
    
                    x.SetServiceName("MyService");
                    x.SetDisplayName("My Service");
                    x.SetDescription("This is my sample service.");
                });
            }
        }
    
        class MyService
        {
            public void Start()
            {
                // TODO: Add code to start your service
                Console.WriteLine("Service started.");
            }
    
            public void Stop()
            {
                // TODO: Add code to stop your service
                Console.WriteLine("Service stopped.");
            }
        }
    }

    在这个示例中,我们创建了一个名为 MyService 的 Windows 服务,并定义了 Start 和 Stop 方法来启动和停止服务。我们还为服务设置了一些元数据,例如服务名称、显示名称和描述。

  2. 要运行此服务,您可以在 Visual Studio 中按 F5,或者通过命令行运行可执行文件并传递参数 install、start、stop 或 uninstall,例如:
cd /d %~dp0
MyWindowsService.exe uninstall
MyWindowsService.exe install
sc config MyService start=auto type= interact type= own
MyWindowsService.exe start

这将安装、启动、停止或卸载 MyService 服务。您可以在控制面板的“管理工具”下找到它,或者使用命令行工具 sc。

注意:如果安装脚本是.bat文件,输入后的文件格式可能变成UTF-8 BOM,需要把格式改成ASCII才能执行成功。

 

posted @ 2023-04-17 14:39  log9527  阅读(399)  评论(0编辑  收藏  举报