Topshelf的使用
一、简介
Topshelf可用于创建和管理Windows服务。其优势在于不需要创建windows服务,创建控制台程序就可以。便于调试。
二、官方地址:
1、官网:http://topshelf-project.com/
2、官方文档:https://topshelf.readthedocs.io/en/latest/
3、github地址:https://github.com/Topshelf/Topshelf
三、详细示例
1、创建控制台程序“Topshelf测试”,Nuget中引入Topshelf,如图所示:

也可以用Nuget的命令行引入,命令如下:
- Install-Package Topshelf
2、在项目中添加类,命名为:TopshelfTest
内容如下:
public class TopshelfTest
{
readonly Timer _timer;
public TopshelfTest()
{
_timer = new Timer() { AutoReset = true };
_timer.Elapsed += (sender, eventArgs) => { Run(); };
}
public void Start() { _timer.Start(); }
public void Stop() { _timer.Stop(); }
public static void Run()
{
Console.WriteLine("hello Topshelf");
}
}
3、在Main函数中加入如下代码:
public static void Main(string[] args)
{
HostFactory.Run(x=>
{
x.RunAsLocalSystem();
x.SetDescription("topshelf测试");
x.SetDisplayName("topshelftest");
x.SetServiceName("topshelftest"); x.Service<TopshelfTest>(s =>
{
s.ConstructUsing(name => new TopshelfTest());
s.WhenStarted(tc => tc.Start());
s.WhenStopped(tc => tc.Stop());
});
});
}
4、运行程序,输出如下,每秒中会执行一次Run函数,也就会打印一次“hello Topshelf”

5、安装服务:
以管理员权限打开cmd命令,管理服务的命令如下:
启动服务:


安装后可以看到服务中出现了安装的服务:

四、示例代码
using System;
using System.Timers;
using Topshelf;
namespace Topshelf测试
{
public class Program
{
public static void Main(string[] args)
{
HostFactory.Run(x=>
{
x.RunAsLocalSystem();
x.SetDescription("topshelf测试");
x.SetDisplayName("topshelftest");
x.SetServiceName("topshelftest"); x.Service<TopshelfTest>(s =>
{
s.ConstructUsing(name => new TopshelfTest());
s.WhenStarted(tc => tc.Start());
s.WhenStopped(tc => tc.Stop());
});
});
}
}
public class TopshelfTest
{
readonly Timer _timer;
public TopshelfTest()
{
_timer = new Timer() { AutoReset = true };
_timer.Elapsed += (sender, eventArgs) => { Run(); };
}
public void Start() { _timer.Start(); }
public void Stop() { _timer.Stop(); }
public static void Run()
{
Console.WriteLine("hello Topshelf");
}
}
}
Topshelf的使用的更多相关文章
- Topshelf 支持Mono 扩展Topshelf.Linux
使用Topshelf 5步创建Windows 服务 这篇文章大家可以了解到使用Topshelf可以很好的支持Windows服务的开发,但是它和Mono不兼容,Github上有一个扩展https://g ...
- Topshelf 学习 跨平台
Topshelf是一个开源的跨平台的宿主服务框架,支持Windows和Mono,只需要几行代码就可以构建一个很方便使用的服务宿主. 官网:http://topshelf-project.com Git ...
- topshelf和quartz内部分享
阅读目录: 介绍 基础用法 调试及安装 可选配置 多实例支持及相关资料 quartz.net 上月在公司内部的一次分享,现把PPT及部分交流内容整理成博客. 介绍 topshelf是创建windows ...
- 使用topshelf包装redis为windows服务
Redis服务端目前用的是控制台程序运行,部署的时候能作为windows服务后台运行感觉更好.找到一篇文章Running Redis as a Windows Service,利用win ...
- TopShelf框架创建Windows服务作为Remoting的宿主案例:
1.创建服务 using System; using System.Collections.Generic; using System.Linq; using System.Text; using S ...
- 使用Topshelf快速搭建Windows服务
1.创建控制台程序 2.安装Topshelf组件 Install-Package Topshelf using System; using System.Timers; using Topshelf ...
- Topshelf + ServiceModelEx + Nlog 从头构建WCF
前言 Topshelf可以很方便的构建windows service,而且在本地开发时也可以构建Console宿主,因此很方便WCF的开发. ServiceModelEx则提供了很多便利的方法来配置w ...
- topshelf包装redis为windows服务
topshelf包装redis为windows服务 Redis服务端目前用的是控制台程序运行,部署的时候能作为windows服务后台运行感觉更好.找到一篇文章Running Redis as a Wi ...
- 使用Topshelf创建Windows服务
概述 Topshelf是创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps with Topshelf通过5个步骤详细的 ...
- 简单实现Windows服务 TopShelf
Nugut安装 log4net 和 topShelf 1)ServiceRunner类 using log4net;using Topshelf; class ServiceRunner : Serv ...
随机推荐
- Go语言中的Package问题
问题一.Go使用Package组织源码的好处是什么? 1.任何源码属于一个包 2.用包组织便于代码的易读和复用 问题二.Go语言中Package的种类 Go语言中存在两种包.一种是可执行程序的包.一种 ...
- Cnblogs美化总结
测试 扩展阅读 [转载]详谈如何定制自己的博客园皮肤 - 云+社区 - 腾讯云谢谢!! [PS]3步搞定博客园界面风格 - nowgood - 博客园 [分享]博客美化(6)为你的博文自动添加目录 - ...
- Codeforces1153F Serval and Bonus Problem 【组合数】
题目分析: 我们思考正好被k个区间覆盖的情况,那么当前这个子段是不是把所有的点分成了两个部分,那么在两个部分之间相互连k条线,再对于剩下的分别连线就很好了?这个东西不难用组合数写出来. 然后我们要证明 ...
- 洛谷P1122最大子树和题解
题目 一道比较好想的树形\(DP\) 完全可以用树形DP的基本思路,递归,然后取最优的方法. \(Code\) #include <iostream> #include <cstri ...
- 定向耦合器 Directional Couplers
microwave101,干货比较多 传送门:https://www.microwaves101.com/encyclopedias/directional-couplers Directional ...
- Kubernetes fluentd+elasticsearch+kibana
前提:dns服务,k8s集群 下载kubernetes,并解压 https://github.com/kubernetes/kubernetes/releases tar zxvf kubernete ...
- ORM系列之Entity FrameWork详解
一. 谈情怀 从第一次接触开发到现在(2018年),大约有六年时间了,最初阶段连接数据库,使用的是[SQL语句+ADO.NET],那时候,什么存储过程.什么事务 统统不理解,生硬的将SQL语句传入SQ ...
- uCosII中的任务
任务基本概念 任务是一个接受操作系统管理的独立运行单元,在uCosII中类似与普通平台上的main()函数,需要自己来保护其因调用或中断二产生的断点,所以需要一个自己的私有堆栈,即任务堆栈: 任务有两 ...
- design language
design language https://en.wikipedia.org/wiki/Design_language 设计语言(设计词汇)是一种超架构的方案和风格, 它用于指导产品组件或者架构配 ...
- Redis实战阅读笔记——第二章(redis重构web)
在性能的要求下,如何用redis重构已有的已有的部分,其实整个例子背后的思路挺好的.在应用缓存的过程中,还有一指标个需要考虑,读写比.