topshelf 开发windows 服务资料
官方配置
http://docs.topshelf-project.com/en/latest/configuration/config_api.html#service-start-modes
topshelf
topshelf和quartz内部分享
阅读目录:
上月在公司内部的一次分享,现把PPT及部分交流内容整理成博客。
介绍
topshelf是创建windows服务的一种方式,相比原生实现ServiceBase、Install.Installer更为简单方便, 我们只需要几行代码即可实现windows服务的开发。topshelf本身支持windows及linux下mono上部署安装,同样也是开源的。
topshelf相对原生来说,调试起来比较方便,可以在开发时以控制台的形式直接f5调试,发布时用命令以服务的形式部署。还一个比较有用的特性是支持多实例的部署,这样可以在一台机器上部署多个相对的服务。类似的工具有instsrv和srvany。
基础用法
Topshelf使用起来比较简单,通过nuget直接安装即可,目前最新的是3.2版本:

示例代码:


HostFactory.Run(x =>
{
x.Service<Manager>(s =>
{
s.ConstructUsing(name => new Manager());
s.WhenStarted(tc => tc.OnStart());
s.WhenStopped(tc => tc.OnStop());
});
x.RunAsLocalSystem();
x.SetDescription("Topshelf测试例子");
x.SetDisplayName("TopshelfExample");
x.SetServiceName("TopshelfExample");
});


其中Run方法的回调参数方法,在运行时执行,方法内是一些配置信息。
其中manager类是我们服务实现类,服务启动时通过WhenStarted调用对应实现的OnStart,停止一样。
RunAsLocalSystem()表示以本地系统账号运行,可选的还有网络服务和本地服务账号。
SetDescription("Topshelf测试例子"); 设置服务的描述
SetDisplayName("TopshelfExample"); 设置服务的显示名称
x.SetServiceName("TopshelfExample"); 设置服务的名称
Manager服务实现类:


public class Manager
{
public void OnStart()
{
Console.WriteLine("Service start.");
}
public void OnStop()
{
Console.WriteLine("Service stopped.");
}
}


调试及安装
调试和平常一样,直接f5即可:

安装时以管理员身份运行CMD,进入程序目录。
输入安装命令: TopshelfExample.exe install topshelf以事务的形式安装,只有成功和失败,兼容性较好,示例:

启动命令是TopshelfExample.exe start,停止TopshelfExample.exe stop
可选配置
topshelf虽小但支持的可配置选项比较多,以下是部分示例:
- SetStartTimeout启动超时
- SetStopTimeout停止超时
- BeforeUninstall卸载前
- AfterUninstall 卸载后回调
- AfterInstall安装后回调
- AfterRollback回滚后回调
- DependsOnMsmq Msmq启动后再启动
- EnablePauseAndContinue支持暂停
- UseLog4Net (“.config")集成log4Net
- UseNLog集成Nlog


多实例支持及相关资料
原生服务上是不支持的,topshelf支持使用不同的名称来部署多个同样的程序实例。 启动一个新实例:
TopshelfExample.exe –instance “newinstallname” install

start、top命令和原先参数格式一样,如卸载:
TopshelfExample.exe –instance "TopshelfExample2" uninstall
多实例有一个好处就是容灾,当一个服务部署多份时,这样其中任何一个服务实例挂了,剩余的可以继续执行。 多实例可以是主备的方式,主挂了备服务才会执行。也可以以负载均衡的方式实现,多实例抢占进程锁或分布式锁,谁拿到谁执行。
文档索引
github地址
topshelf命令列表
TopshelfExample.exe help
quartz.net
关于quartz.net早先有系列介绍过,只贴下链接。
topshelf 开发windows 服务资料的更多相关文章
- C# DateTime的11种构造函数 [Abp 源码分析]十五、自动审计记录 .Net 登陆的时候添加验证码 使用Topshelf开发Windows服务、记录日志 日常杂记——C#验证码 c#_生成图片式验证码 C# 利用SharpZipLib生成压缩包 Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库
C# DateTime的11种构造函数 别的也不多说没直接贴代码 using System; using System.Collections.Generic; using System.Glob ...
- 使用Topshelf开发Windows服务、log4net记录日志
开发windows服务,除了在vs里新建服务项目外(之前有写过具体开发方法,可点击查看),还可以使用Topshelf. 不过使用topshelf需要.netframework 4.5.2版本,在vs2 ...
- 使用Topshelf 开发windows服务
在业务系统中,我们为了调度一些自动执行的任务或从队列中消费一些消息,所以基本上都会涉及到后台服务的开发.如果用windows service开发,非常不爽的一件事就是:调试相对麻烦,而且你还需要了解 ...
- C#开发windows服务如何调试——资料整理
原文标题:C# Windows服务程序如何进行调试 原文地址:https://jingyan.baidu.com/article/456c463b18e1b00a583144b3.html 第一种: ...
- C#/.NET基于Topshelf创建Windows服务的守护程序作为服务启动的客户端桌面程序不显示UI界面的问题分析和解决方案
本文首发于:码友网--一个专注.NET/.NET Core开发的编程爱好者社区. 文章目录 C#/.NET基于Topshelf创建Windows服务的系列文章目录: C#/.NET基于Topshelf ...
- 使用Topshelf创建Windows服务
概述 Topshelf是创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps with Topshelf通过5个步骤详细的 ...
- Topshelf创建Windows服务
使用Topshelf创建Windows服务 概述 Topshelf是创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps ...
- C#开发Windows服务详细流程
1.Windows服务简单介绍 Windows服务程序是在Windows操作系统下能完成特定功能的可执行的应用程序,主要用于长时间运行的功能或者执行定时任务.一般情况下,用户不能通过用户界面来安装和启 ...
- 使用Topshelf管理Windows服务
目的:以控制台方式开发Windows服务程序,调试部署方便. https://www.cnblogs.com/itjeff/p/8316244.html https://www.cnblogs.com ...
随机推荐
- Visual Studio提示“无法启动IIS Express Web服务器”的解决方法 vs调试显示无法显示此页面 ,vs调试浏览器白页
有时,在使用Visual Studio运行ASP.NET项目时,会提示“无法启动IIS Express Web服务器”,无法运行,如图: 这一般出现在重装系统之后,或者项目是从别的电脑上复制过来的.解 ...
- NOI2015滚粗记
我的第一次也是最后一次NOI 好像写的晚了许多……可能一谈到退役总会有些伤感,并不愿去面对…… 一路走来已有5年,虽然我总在说“其实我好好学的时间只有半年”,但那也不过是给自己是蒟蒻找的借口吧...一 ...
- Mongodb的windows服务安装和卸载
不用 InstallUtil.exe,直接用mongod.exe做就可以: 安装:mongod --dbpath "C:\mongodb\db" --logpath "C ...
- Nuget挂了的解决方法(转)
今天用Nuget下一个程序包时,发现Nuget挂了:未能解析此远程名称:'nuget.org'.第一反应就是方校长抖威风了,挂个代理上 http://nuget.org 试了下,果然好好的. 用命令n ...
- 如何去除图片上的文字(PS使用教程)
很多时候由于工作的需要,需要对我们的图片进行修改,修改的同时还想要保存我们的图片背景,所以很多人就不知道怎么弄了,小编跟大家分享一下使用PS如何简单的去掉图片上的文字,希望对大家有所帮助! 方法/步骤 ...
- 转: Vim快捷键分类
Vim快捷键分类 http://www.cnblogs.com/jikey/archive/2011/12/28/2304341.html 一. 移动: h,j,k,l: 左,下,上,右. ...
- Hibernate: No Session found for current thread
在Struts2+Hibernate+Srping项目中经常会遇到这种问题 我知道的一种情况是: Spring的事务配置中没有配置好异常出现处的路径 <aop:advisor pointcut= ...
- 【Python】torrentParser1.02
#------------------------------------------------------------------------------------ # torrentParse ...
- 详解使用DockerHub官方的mysql镜像生成容器
详解使用DockerHub官方的mysql镜像生成容器 收藏 yope 发表于 10个月前 阅读 1506 收藏 32 点赞 1 评论 0 腾讯云·云上实验室:开发者零门槛,免费使用真机在线实验!&g ...
- 安装logstash+kibana+elasticsearch+redis搭建集中式日志分析平台
安装logstash+kibana+elasticsearch+redis搭建集中式日志分析平台 2014-01-16 19:40:57| 分类: logstash | 标签:logstash ...