.NET Core 使用Topshelf方式创建Windows服务

Topshelf是一个.NET Standard库,它消除了在.NET Framework和.NET Core中创建Windows服务的那些麻烦。

安装

Install-Package Topshelf

代码

using System;
using System.Collections.Generic;
using System.Text;
using Topshelf;namespace ConsoleApp2222
{public class LoggingService : ServiceControl{private void Log(string logMessage){Console.WriteLine(logMessage);}public bool Start(HostControl hostControl){Log("Starting");return true;}public bool Stop(HostControl hostControl){Log("Stopping");return true;}}
}

在Program.cs文件的Main方法中

1、服务的名称

2、服务是否自动启动

3、服务崩溃之后的重启时间

using System;
using Topshelf;namespace ConsoleApp2222
{internal class Program{private static void Main(string[] args){HostFactory.Run(x =>{x.Service<LoggingService>();x.EnableServiceRecovery(r => r.RestartService(TimeSpan.FromSeconds(10)));x.SetServiceName("TestService");x.StartAutomatically();});}}
}

部署服务

ConsoleApp2222.exe install
ConsoleApp2222.exe start

调试服务

如果我们的服务代码已经在Visual Studio中打开了,我们就可以直接启动调试。Topshelf会模拟在控制台中启动服务。我们应该能在控制台中看到以下的消息。

这确实符合了我们的需求。它启动了我们的服务,并像真正的Windows服务一样在后台运行。我们可以像往常一样设置断点,基本上它遵循的流程和正常安装的服务一样。

我们可以通过ctrl+c, 来关闭我们的应用,但是在运行服务执行Stop方法之前,它是不能被关闭的,这使我们可以调试服务的关闭流程。与调试指令和配置标志相比,这要容易的多。

这里需要注意一个问题。如果你收到的以下内容的消息:

这意味着你尝试调试的服务实际上已经作为Windows服务被安装在系统中了,你需要停止(不需要卸载)这个正在运行的服务,才可以正常调试。

参考文档

https://topshelf.readthedocs.io/en/latest/configuration/config_api.html

https://github.com/Topshelf/Topshelf

http://topshelf-project.com/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305887.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用VC++修改注册表----让我们踏出第一步(适合初学者)

用VC修改注册表----让我们踏出第一步(适合初学者)转载自&#xff1a;www.csdn.net 开场白 你是不是非常期待通过自己的双手&#xff0c;写出一个有模有样的&#xff02;系统修改&#xff08;维护&#xff09;工具软件&#xff02;&#xff1f;我想答案应该是肯定的&…

Repeater分页

//ASP.NET中的DataList和Repeater提供了简单快速的方法來显示,其间&#xff0c;我们可以使用<ItemTemplate>更是使我们能随心所欲的控制数据的排放样式&#xff01;//.可惜的是它们不像Datagrid那样&#xff0c;有内置的分页功能。////如何解决呢&#xff1f;////其实我们…

单一职责在.NET中

单一职责是降低耦合度的指导思想&#xff0c;适用于一个微服务&#xff0c;一个类型&#xff0c;一个方法。微服务层&#xff1a;微服务一般按业务的领域来进行拆分&#xff1a;药房微服务就是药房的业务&#xff0c;护士站微服务就是护士站的业务&#xff0c;广义上没有什么问…

PDG转PDF的方法

下面是我在“小文论坛”发的关于PDG转PDF的办法转贴请注明出自“小文论坛”.点击链接访问小文论坛前些天在坛子里看到一位朋友发的通过代理登录教育网超星的办法,试了试,还不错,下下来了几本吉他方面和计算机方面的书。但下下来的书是加密保存的&#xff0c;当该用户过期后又怎…

Roslyn 使用 Directory.Build.props 管理多个项目配置

在一些大项目需要很多独立的仓库来做&#xff0c;每个仓库之间都会有很多相同的配置&#xff0c;本文告诉大家如何通过 Directory.Build.props 管理多个项目配置在我的 MVVM 框架需要三个不同的库&#xff0c;一个是 Framework 另外两个是 WPF 和 UWP 这三个库有很多重复的配置…

java 中符号_谁能告诉我java中符号的用法,见代码

展开全部大家都知道Vector以及其他的容器可以不加任何修饰地e68a8462616964757a686964616f31333236373765存储任何类型的对象,这给我们带来了极大的方便&#xff0c;也使得容器很容易被复用&#xff0c;但是大多数时候我们可能需要只能存储某一类型对象的Vector&#xff0c;这是…

彻底堕落了一回——大三篇

转载于:https://www.cnblogs.com/wuwa/archive/2005/06/21/6191772.html

在.NET Core中使用Channel(一)

我最近一直在熟悉.net Core中引入的新Channel<T>类型。我想在它第一次发布的时候我了解过它&#xff0c;但是有关文章非常非常少&#xff0c;我不能理解它们与其他队列有什么不同。在使用了一段时间后&#xff0c;我终于看到了它们的吸引力和真正的力量。最值得注意的是大…

java控制系统音量_Java 控制 Windows 系统音量-Go语言中文社区

目录1、使用 Java 来控制 Windows 系统音量&#xff0c;使用 JNA 调用 windows 底层 API 因为有点麻烦&#xff0c;所以这里采用纯 Java API结合 VBS 脚本的方式进行控制。2、可以参考《VBS 控制 Windos 系统音量 及视频播放》&#xff0c;本文同样是利用 VBS 来控制&#xff0…

无题

今天开会&#xff0c;其实不开都知道要讲啥&#xff0c;教代会上就是讨论关于薪金的问题&#xff0c;钱拿的越来越少&#xff0c;所以要想拿钱的话只有写论文&#xff0c;带比赛&#xff0c;或参加比赛&#xff0c;获奖后才能有钱发&#xff0c;哎~~~昨天晚上xz说她确定要ky&am…

【Hook】postman工具的代码生成工具让它锦上添花

修改postman工具的代码生成工具加入response自动生成POJO代码如上图可以快速把请求这个动作转成code&#xff0c;减少重复性劳动。但是有一点我觉得可以优化下 就是返回的json如果也能自动转成代码就好了。不然在需要把json序列化成java或者csharp的POJO对象时还得自己coding转…

2005/7/15[随便写写]

通过面试开始在公司正式上班了&#xff0c;去的很早&#xff0c;呵呵&#xff0c;以为里面的员工都需要敲卡的&#xff0c;不想给大家一个坏印象。环境么给我的感觉氛围很不错&#xff0c;没有传统IT行业那种被项目赶得焦头烂额的样子&#xff0c;可是我的性格决定了我不是那种…

java nature_Java Nature.nsf方法代码示例

import com.hankcs.hanlp.corpus.tag.Nature; //导入方法依赖的package包/类/*** 执行识别* param segResult 粗分结果* param wordNetOptimum 粗分结果对应的词图* param wordNetAll 全词图*/public static void Recognition(List segResult, WordNet wordNetOptimum, WordNet…

使用BeetleX.ESDoc构建文档搜索功能

BeetleX.ESDoc组件是基于ElasticSearch服务的文档搜索扩展组件。它在BeetleX.Elasticsearch的基础上包装一些基于文档检索的功能和方法&#xff0c;可以让你在不了解ElasticSearch API的情况下直接存储&#xff0c;删除和搜索相关信息。信息结构BeetleX.ESDoc定义了一个基础的文…

java在文件的后面添加_java 在file的尾部添加数据的两种方法总结

java 在file的尾部添加数据的两种方法总结问题描述:在文件的末尾追加内容方法1:利用RandomAccessFile类1.将randomAccessFile模式设置为rw2将randomAccessFile移动(seek)到文件末尾3追加数据4关闭流方法2:利用FileWriter类1.将FileWriter构造方法第二个参数置为true.表示在尾部…

日产汽车源码遭泄露

喜欢就关注我们吧&#xff01;日产北美公司开发和使用的移动应用及内部工具的源代码于近日在网上泄露&#xff0c;原因是该公司错误配置了其中一台 Git 服务器。瑞士软件工程师 Tillie Kottmann 向 ZDNet 透露&#xff0c;此次泄露源于一台配置错误的 Bitbucket Git 服务器的信…

开源纯C#轻量级数据库引擎:SharpHSQL 1.0.3.0版本

开源纯C#轻量级数据库引擎&#xff1a;SharpHSQL 1.0.3.0版本出了&#xff12;个多月了&#xff0c;我一直没有给大家报道&#xff0c;这是目前唯一发现的用纯C#开发的稳定的轻量级数据库引擎&#xff0c;在我的建议下&#xff0c;已经支持Unicode&#xff0c;包括简体中文了。…

mysql约束深入了解_MySQL 的约束

约束是添加在列上, 用来约束列的!1. 主键约束(表中的某行的唯一标识)主键的特点:非空唯一被引用创建表时, 指定主键的两种方式&#xff1a;// 需求: 指定 sid 列为主键列, 即为 sid 列添加主键约束// 第一种方式:CREATE TABLE stu(sid CHAR(6) PRIMARY KEY,sname VARCHAR(20),a…

中台的故事结束了?

大家好&#xff0c;我是Z哥。所谓30年河东30年河西&#xff0c;最近阿里开始去中台了。这是不是意味着中台时代的落幕&#xff0c;去中心化时代的开始&#xff1f;谁都说不准。但是我们可以来思考一下这个事情背后释放出了什么样的信号。对我们普通人&#xff0c;特别是互联网行…

[ZT]C#的多线程机制探索(2)

三.线程的同步和通讯——生产者和消费者假设这样一种情况&#xff0c;两个线程同时维护一个队列&#xff0c;如果一个线程对队列中添加元素&#xff0c;而另外一个线程从队列中取用元素&#xff0c;那么我们称添加元素的线程为生产者&#xff0c;称取用元素的线程为消费者。…