首页 > 系统相关 >C# 使用Topshelf快速创建Windows服务程序

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

时间:2023-04-17 14:44:40浏览次数:41  
标签:服务程序 服务 Service C# 创建 Windows MyService Topshelf

前言:

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 instll
sc config HotspotMonitor type= interact type= own
MyWindowsService.exe start

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

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

 

标签:服务程序,服务,Service,C#,创建,Windows,MyService,Topshelf
From: https://www.cnblogs.com/log9527blog/p/17325795.html

相关文章

  • ClickHouse集群+ZooKeeper集群架构下的ZooKeeper集群迁移
     ClickHouse集群+ZooKeeper集群架构下的ZooKeeper集群迁移 目前测试环境的ck集群+zk集群架构如下:ClickHouseZooKeeper192.168.1.171192.168.1.172192.168.1.173192.168.1.174192.168.1.171192.168.1.172192.168.1.173由于ck和zk混搭在一块,存在较为严重......
  • Apache2.4配置http自动跳转到https
    首先在httpd.conf中配置如下:打开Apache重写模块(把#号去掉):LoadModulerewrite_modulemodules/mod_rewrite.so然后修改Directory里的内容,注意是修改标签包含自己项目路径的配置项<Directory"E:/wsp/www">OptionsIndexesFollowSymLinksAllowOverrideAllRewriteE......
  • Apache2.4开启GZIP功能
    HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的技术。大流量的WEB站点常常使用GZIP压缩技术来让用户感受更快的速度。这一般是指WWW服务器中安装的一个功能,当有人来访问这个服务器中的网站时,服务器中的这个功能就将网页内容压缩后传输到来访的电脑浏览器中显示出来.一般对......
  • python s12 day13 JavaScript、Dom和jQuery
    1.JavaScriptJavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的处理。1、JavaScript代码存在形式<!--方式一--><scripttype"text/javascript"src="JS文件"></script>......
  • go struct结构体之间的转换
    原文链接:https://www.zhoubotong.site/post/94.html说下背景吧,大家在开发中可能在不同的目录(package)下定义了相同的struct(属性参数完全一样如名字、个数和类型),在方法调用传参数的时候,可能是用到了其中某一个struct的引用。那么这里就牵扯到相互间的转换:直接上demo:pack......
  • c#中的异常处理
    try、catch、finally异常是程序在执行过程中出现了错误,就像汽车行驶过程中刹车失灵或爆胎了,如果程序没有提供处理该异常的代码,系统会挂起这个程序(就是死掉了,崩掉了)。c#中处理异常,需要用到try、catch(可以写多个该部分)、finally这三个代码块。具体作用见下图:尤其注意Final......
  • license
    ......
  • 2-207-通过(LeetCode-509)熟悉动态规划的解题步骤
    1.题目 运态规划的定义   动态规划的解题步骤  2.解法2.1递归 publicstaticintfibonacci(intn){if(n==0){return0;}if(n==1){return1;}returnfibonacci(n-1)+fibonacci(n-2);}2.2运态规划+递归......
  • RocketMQ 多级存储设计与实现
    作者:张森泽随着RocketMQ5.1.0的正式发布,多级存储作为RocketMQ一个新的独立模块到达了TechnicalPreview里程碑:允许用户将消息从本地磁盘卸载到其他更便宜的存储介质,可以用较低的成本延长消息保留时间。本文详细介绍RocketMQ多级存储设计与实现。设计总览RocketMQ多级......
  • 修复 导出csv中文乱码
    header('Content-Encoding:UTF-8');header("Content-type:text/csv;charset=UTF-8");header("Content-Disposition:attachment;filename={$file_name}.csv");header("Pragma:no-cache");......