topshelf

article/2025/10/21 14:41:36
topshelf和quartz

topshelf和quartz内部分享

阅读目录:

  1. 介绍
  2. 基础用法
  3. 调试及安装
  4. 可选配置
  5. 多实例支持及相关资料
  6. quartz.net

上月在公司内部的一次分享,现把PPT及部分交流内容整理成博客。

介绍

topshelf是创建windows服务的一种方式,相比原生实现ServiceBase、Install.Installer更为简单方便, 我们只需要几行代码即可实现windows服务的开发。topshelf本身支持windows及linux下mono上部署安装,同样也是开源的。

topshelf相对原生来说,调试起来比较方便,可以在开发时以控制台的形式直接f5调试,发布时用命令以服务的形式部署。还一个比较有用的特性是支持多实例的部署,这样可以在一台机器上部署多个相对的服务。类似的工具有instsrv和srvany。

基础用法

Topshelf使用起来比较简单,通过nuget直接安装即可,目前最新的是3.2版本:

问题一:不使用Package管理工具如何安装Package呢?
答:使用Package Manager Console.

问题二: 如何安装特定版本的程序集?
答: 在 Package Manager Console 中使用 带参数的 Install-Package 命令
通过   TooLS -> Libary Manager Console -> Package Manager Console 即可打卡面板。
输入Install-Package Microsoft.AspNet.SignalR -Version 1.1.0(使用SignaR 1.1.0 为例子)

问题三:如何卸载特定的Package呢?
答:使用 Uninstall-Package 命令
例如:Uninstall-Package Microsoft.AspNet.SignalR -Version 1.1.0


示例代码:

复制代码
复制代码
 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早先有系列介绍过,只贴下链接。

Net作业调度(五)—quartz.net动态添加job设计

Net作业调度(四)—quartz.net持久化和集群

Net作业调度(三) — Quartz.Net进阶

Net作业调度(二) -CrystalQuartz远程管理

Net作业调度(一) -Quartz.Net入门

 


http://chatgpt.dhexx.cn/article/EmmhKfqR.shtml

相关文章

使用Quartz.net + Topshelf完成服务调用

概述&#xff1a; Quartz.NET 是一个开源作业调度库&#xff0c;可用于在 .NET 应用程序中调度和管理作业。它提供了一个灵活而强大的框架&#xff0c;用于调度作业在特定的日期和时间或以固定的时间间隔运行&#xff0c;并且还支持复杂的调度场景&#xff0c;例如 cron 表达式…

Linux中top命令参数详解

top命令用法 top命令经常用来监控linux的系统状况&#xff0c;是常用的性能分析工具&#xff0c;能够实时显示系统中各个进程的资源占用情况。 top的使用方式 top [-d number] | top [-bnp] 参数解释&#xff1a; -d&#xff1a;number代表秒数&#xff0c;表示top命令显示…

linux 命令:top 详解

注&#xff1a;以下文档根据2019年10月的官方文档翻译。 名称&#xff1a;top - 展示linux进程信息 用法&#xff1a;top -hv|-bcEHiOSs1 -d secs -n max -u|U user -p pid -o fld -w [cols] 在top进程运行过程中&#xff0c;两个最重要的功能是查看帮助&#xff08;h 或 &…

Topshelf 搭建 Windows 服务

C# Topshelf 搭建 Windows 服务 Topshelf 是一个用来部署基于.NET Framework 开发的服务的框架。简化服务创建于部署过程&#xff0c;并且支持控制台应用程序部署为服务。本文基于 .net core 控制台应用程序部署为服务&#xff08;.net Framework 可用&#xff09;。 第一步&…

TOP命令详解

TOP命令详解 top命令经常用来监控linux的系统状况&#xff0c;是常用的性能分析工具&#xff0c;能够实时显示系统中各个进程的资源占用情况。 top的使用方式 top [-d number] | top [-bnp]参数解释&#xff1a; -d&#xff1a;number代表秒数&#xff0c;表示top命令显示的页…

【转】Topshelf入门

windows服务用处多多啊&#xff0c;wcf宿主服务、webapi宿主服务、定时任务等都会用到&#xff0c;最近写的一套呼叫中心&#xff0c;也最终要做成windows服务&#xff0c;以前都是用vs里面自带的windows服务来写&#xff0c;但感觉总是不够方便&#xff0c;最近了解到了topshe…

使用Topshelf创建Windows服务

概述 Topshelf是创建Windows服务的另一种方法&#xff0c;老外的一篇文章Create a .NET Windows Service in 5 steps with Topshelf通过5个步骤详细的介绍使用使用Topshelf创建Windows 服务。Topshelf是一个开源的跨平台的宿主服务框架&#xff0c;支持Windows和Mono&#xff0…

QT编程入门之QT designer

1.qt 编程的工作流程简介 使用QT作为GUI开发工具的项目流程&#xff0c;可用下图表示&#xff1a; QT项目开发流程 开发流程的解析&#xff1a;假设用QDesigner设计了一个X.UI窗口&#xff0c;之后就需要使用uic来进行编译&#xff0c;生成对应的.h文件.另外一个自定义的类型…

Qt入门学习——Qt Creator 中 ui 文件和 Qt 代码关系

通过《Qt Creator的使用》的学习&#xff0c;我们可以借助 Designer&#xff08;界面设计器&#xff09;快速设计界面。 此例子 ui 内容如下&#xff08;只是简单添加了一个按钮&#xff09;&#xff1a; 工程的代码目录结构如下&#xff1a; 最终在工程所在目录会生成一个 ui …

Qt 设计师 - Qt Designer 调整 控件 居中

目录 问题方案 问题 在上面这张图中&#xff0c;有三个垂直布局&#xff0c;但是垂直布局中上层的控件没办法拖到居中的位置。 方案 点击这个控件&#xff0c;右键 这里2是水平居中&#xff0c;下面的是垂直居中&#xff0c;操作三次&#xff0c;好了

使用Qt Designer和Qss设计Qt界面

开发界面其实一点都不比写后台逻辑简单&#xff0c;后台逻辑对需求方来说只有能用和不能用&#xff0c;但是界面没有一个确切的标准说好看还是不好看&#xff0c;所以设计出一个大家都说好的界面真的很难。 我们的业务是服务于内部用户的&#xff0c;其实大家对我们的评价就是…

Qt Designer和Qt Creator区别

不管是Qt新手还是开发过qt的群体来说&#xff0c;对Qt Designer、Qt Quick Designer、Qt Creator这几个应用程序肯定是熟悉的&#xff0c;但是你要是说具体的区别&#xff0c;干啥用的或者是它们实际上是单独的事物还是同一事物的名称&#xff0c;或者还是名称随时间变化了还是…

Qt Designer的简单使用

在前面两节的例子中&#xff0c;主界面窗口的尺寸和标签控件显示的矩形区域等&#xff0c;都是用 C 代码编写的。窗口和控件的尺寸都是预估的&#xff0c;控件如果多起来&#xff0c;那就不好估计每个控件合适的位置和大小了。 用 C 代码编写图形界面的问题就是不直观&#xf…

Qt Design Studio

1 介绍 1.1 概述 1.2 Qt Design Studio的详细特性 QtPhotoshop Bridge 在Photoshop中创建您的UI设计和UI组件&#xff0c;然后把它们导入到Qt Design Studio中。这包含一个先进的Photoshop插件&#xff0c;它能把您的设计翻译成QML语言&#xff0c;并导入到Qt Design Studio…

PyQt5利用Qt designer(QT设计师)使用tab widget和stacked widget实现多页面切换

PyQt5 Qt designer QT设计师 使用tab widget和stacked widget实现多页面切换 一、使用Qt designer(QT设计师)进行多页面切换ui设计二、实现tab widget多页面切换三、实现stacked widget多页面切换四、生成代码五、运行效果 一、使用Qt designer(QT设计师)进行多页面切换ui设计 …

Qt漂亮界面

Qt漂亮界面 功能规划&#xff1a;一、去掉菜单栏和工具栏二、顶部导航栏的设计appinit.h头文件appinit.cpp的文件使用方式&#xff1a; 三、阵列按钮的点击事件写法四、重写缩写界面、放大界面和关闭程序事件五、鼠标事件的处理Qt大量同类控件的操作正则表达式的设计Qt 手把手教…

PyQt5 Qt Designer 新手教程(一)—— 软件界面介绍

PyQt5 Qt Designer 新手教程&#xff08;一&#xff09;—— 软件界面介绍 教程博文 一、前言 终于学到了 PyQt5 Qt 设计师&#xff08;Qt Designer&#xff09;这个软件&#xff0c;博主感觉心情还是很激动的。因为&#xff0c;当初学 PyQt5 &#xff0c;想要设计一个窗体时…

qt界面设计

设计界面时大概可以分三步&#xff1a; 构造出需要的所有控件通过布局管理器确定控件位置通过样式表优化控件样式 1.布局管理器 1. QBoxLayoutQHBoxLayout 水平布局QVBoxLayout 垂直布局1&#xff09;setStretch 设置部件的拉伸系数2&#xff09;setSpacing 设置部…

QTDesigner简介

1、QTDesigner简介&#xff1a; 手写代码工作量大、代码结构容易搞得混乱。 设计工具&#xff1a;直观、高效&#xff0c;工作量小&#xff0c;方便调试。界面和逻辑分离后期好维护。 介绍&#xff1a;&#xff08;实现了视图和逻辑的分离&#xff0c;开发代码更容易分离&…

PyQt5:使用QT设计师设计界面

一. 界面设计 登录预览&#xff1a; 图1.1 设计界面 界面文件 可以在这里下载login.ui文件 资源文件 除了ui文件&#xff0c;有时候需要使用到资源&#xff1a; 图片资源 窗体图标(login.png): .qrc文件 可以在这里下载.qrc文件&#xff0c;文件内容如下&#xff1…