首页 > 其他分享 >TopShelf-(01)控制台实例-Program

TopShelf-(01)控制台实例-Program

时间:2022-10-28 15:02:33浏览次数:70  
标签:01 服务 void tc Program TopShelf Msg using public


开发windows服务时,最麻烦的就是调试了,需要安装=》运行=》附加进程=》开始调试。修改代码后要重复以上步骤。


topshelf 允许使用控制台程序开发 windows服务,调试非常方便。就像调试控制台程序一样 F5 启动就OK了。


开发时我们可以大大节省调试时间,只需几行代码就可以开发出一个windows服务。




介绍:


topshelf是创建windows服务的一种方式,相比原生实现ServiceBase、Install.Installer更为简单方便, 


我们只需要几行代码即可实现windows服务的开发。


topshelf相对原生来说,调试起来比较方便,可以在开发时以控制台的形式直接f5调试,发布时用命令以服务的形式部署。


还一个比较有用的特性是支持多实例的部署,这样可以在一台机器上部署多个相对的服务。






官网:http://topshelf-project.com/


源码:https://github.com/Topshelf/Topshelf/


实例代码:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Timers;
using Topshelf;
using TopshelfServiceRule;


namespace TopshelfService
{
/*
* Topshelf 框架安装服务常用命令
* 安装:TopshelfService.exe install
* 启动:TopshelfService.exe start
* 停止:TopshelfService.exe stop
* 卸载:TopshelfService.exe uninstall
*/
class Program
{
static void Main(string[] args)
{
HostFactory.Run(x =>
{
//使用 TownCrier 类,配置服务事件
x.Service<TownCrier>(s =>
{
//使用自定义的服务
s.ConstructUsing(name => new TownCrier());
//服务启动事件
s.WhenStarted(tc => tc.Start());
//服务停止后事件
s.WhenStopped(tc => tc.Stop());
//服务停止后继续运行时事件
s.WhenContinued(tc => tc.Continued());
//服务暂定事件
s.WhenPaused(tc => tc.Paused());
//服务卸载事件
s.WhenShutdown(tc => tc.Shutdown());
});


#region 服务配置

x.RunAsLocalSystem();


#region 启动类型
x.StartAutomatically();//自动运行
//x.StartManually();//手动运行
//x.StartAutomaticallyDelayed();//自动延迟运行
//x.Disabled();//禁用
#endregion


#region 服务信息
x.SetDescription("111 服务 111服务的描述");//描述
x.SetDisplayName("111 显示名");//显示名称
x.SetServiceName("111服务");//服务名称
#endregion


#endregion
});
}
}
//服务调用的类,其中的函数对应服务中的事件,如启动事件、暂停事件、恢复事件、继续运行事件等
public class TownCrier
{
readonly Timer _timer;
public TownCrier()
{
_timer = new Timer(1000) { AutoReset = true };
_timer.Elapsed += (sender, eventArgs) =>
{
Console.WriteLine("It is {0} and all is well", DateTime.Now);
Msg(string.Format("It is {0} and all is well", DateTime.Now));
};
}
public void Start() { _timer.Start();Msg("已启动");}
public void Stop() { _timer.Stop(); Msg("已停止"); }
public void Continued() { Msg("继续运行"); }
public void Paused() { Msg("已暂停"); }
public void Shutdown() { Msg("已卸载"); }


public void Msg(params string[] msg)
{
ServiceEvent.Msg(msg);
if (msg != null)
msg.All(x => { Console.WriteLine(x);return true; });
}
}


}


标签:01,服务,void,tc,Program,TopShelf,Msg,using,public
From: https://blog.51cto.com/u_4518216/5804885

相关文章

  • vs2015中搭建EF框架在代码生成策略中找不到“旧的ObjectContext
    vs2015中搭建EF框架在代码生成策略中找不到“旧的ObjectContext”生生不息0.o于2022-01-0617:28:10发布429收藏分类专栏:C#EF文章标签:c#软件框架版权C#同时被......
  • fs_ext01 originate
    阅读说明笔记根据freeswitch官方文档和FreeSWITCH权威指南简单介绍originate的基本用法,最后概述下自己的阅读测试结论originate概述-Originateanewcall.Usage......
  • 结构性型模式概述01--代理模式
    结构性型模式概述:Java-JDK动态代理详解(AOP)动态代理是如何实现的?JDKProxy和CGLib有什么区别?文章目录​​结构性型模式概述:​​​​[Java-JDK动态代理详解(AOP)](java......
  • Kotlin Jetpack 实战 | 01. 从一个膜拜大神的 Demo 开始
    简介本文属于​​《KotlinJetpack实战》​​系列文章。这是我用Java写的一个“原始架构”的App,名字叫:​​KotlinJetpackInAction​​​,它的功能只有一个:​​膜拜大神!​......
  • 创建型模式01----单例模式
    创建型模式的特点和分类创建型模式的关注点是"怎样创建对象",特点:将对象的创建与使用分离,这样可以降低系统的耦合度,使用者不需要关注对象的创建细节,对象的创建由相关的......
  • Java8 新特性01-接口修饰-Lambda
    Java8新特性文章目录​​Java8新特性​​​​接口中默认的方法修饰为普通方法​​​​Lambda表达式​​​​为什么要使用Lambda表达式​​​​Lambda表达式的规范​​​​......
  • 消息队列-总概-01
    消息队列文章目录​​消息队列​​​​MQ相关概念​​​​什么是mq​​​​为什么使用MQ​​​​流量消峰​​​​应用解耦​​​​异步处理​​​​MQ的分类​​​​1.Act......
  • JavaWeb-01--JavaWeb的概念--Servlet 技术-- ServletConfig类--ServletContext 类- HT
    文章目录​​1.JavaWeb的概念​​​​**Web****资源的分类**​​​​常用的Web服务器​​​​Tomcat目录介绍​​​​Servlet技术​​​​什么是servlet​​​​手动实现S......
  • 数据结构与算法(Python)[一看就会] 01-1 线性表-顺序表定义
    线性表的顺序表示线性表的顺序表示又称为顺序存储结构或顺序映像。顺序存储定义:把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构。特点:逻辑上相邻的元素,物......
  • javaSE01概述与第一个程序
    java概述与第一个程序为什么是java市场需求高java语言用途广:服务器程序,Android应用,软件工具,嵌入式领域,大数据技术Java语言发展史1991年SUN公司詹姆斯•高斯林提出要求:......