一、简介

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命令,管理服务的命令如下:

安装:Topshelf测试.exe install
启动:Topshelf测试.exe start
卸载:Topshelf测试.exe uninstall
 
执行命令需要切入到程序目录下,如图所示:
安装服务:

启动服务:

 
卸载服务:

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

四、示例代码

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的使用的更多相关文章

  1. Topshelf 支持Mono 扩展Topshelf.Linux

    使用Topshelf 5步创建Windows 服务 这篇文章大家可以了解到使用Topshelf可以很好的支持Windows服务的开发,但是它和Mono不兼容,Github上有一个扩展https://g ...

  2. Topshelf 学习 跨平台

    Topshelf是一个开源的跨平台的宿主服务框架,支持Windows和Mono,只需要几行代码就可以构建一个很方便使用的服务宿主. 官网:http://topshelf-project.com Git ...

  3. topshelf和quartz内部分享

    阅读目录: 介绍 基础用法 调试及安装 可选配置 多实例支持及相关资料 quartz.net 上月在公司内部的一次分享,现把PPT及部分交流内容整理成博客. 介绍 topshelf是创建windows ...

  4. 使用topshelf包装redis为windows服务

           Redis服务端目前用的是控制台程序运行,部署的时候能作为windows服务后台运行感觉更好.找到一篇文章Running Redis as a Windows Service,利用win ...

  5. TopShelf框架创建Windows服务作为Remoting的宿主案例:

    1.创建服务 using System; using System.Collections.Generic; using System.Linq; using System.Text; using S ...

  6. 使用Topshelf快速搭建Windows服务

    1.创建控制台程序 2.安装Topshelf组件  Install-Package Topshelf using System; using System.Timers; using Topshelf ...

  7. Topshelf + ServiceModelEx + Nlog 从头构建WCF

    前言 Topshelf可以很方便的构建windows service,而且在本地开发时也可以构建Console宿主,因此很方便WCF的开发. ServiceModelEx则提供了很多便利的方法来配置w ...

  8. topshelf包装redis为windows服务

    topshelf包装redis为windows服务 Redis服务端目前用的是控制台程序运行,部署的时候能作为windows服务后台运行感觉更好.找到一篇文章Running Redis as a Wi ...

  9. 使用Topshelf创建Windows服务

    概述 Topshelf是创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps with Topshelf通过5个步骤详细的 ...

  10. 简单实现Windows服务 TopShelf

    Nugut安装 log4net 和 topShelf 1)ServiceRunner类 using log4net;using Topshelf; class ServiceRunner : Serv ...

随机推荐

  1. layui——Cannot create property 'LAY_TABLE_INDEX' on number '1'

    前言 用layui写的后台,PHP处理好数据传输过来的时候报错了,最后发现是数据处理成layui格式的时候出错了,直接传了json对象过来,layui需要的是一个json的数. 解决 外面套成数组即可 ...

  2. Luogu3732 [HAOI2017] 供给侧改革 【后缀数组】【线段树】【乱搞】

    题目分析: 这道题我是乱搞的,因为他说$01$串是随机的. 那么我们可以猜测能够让LCP变大的地方很少.求出后缀数组之后可能让LCP变大的地方就等价于从大到小往height里动态加点同时维护这个点左右 ...

  3. js-sha256源码

    /** * [js-sha256]{@link https://github.com/emn178/js-sha256} * * @version 0.9.0 * @author Chen, Yi-C ...

  4. LOJ#2665 树的计数

    题意:给你DFS序和BFS序,求树的期望高度. 解:先分析性质. 考虑到BFS序是分层的,DFS序的子树是一段,那么我们遍历BFS序并在DFS序上标记对应点的话,就会发现BFS序每一层都会把若干棵子树 ...

  5. 公共DNS推荐及dns测速

    DNS在平时上网中扮演重要角色,如果不注意DNS的话,可能会导致网速慢.弹窗广告.网址打不开.打开不是自己想要的网站.劫持等一系列问题.针对DNS的问题,今天我们就来总结一下,看看哪个DNS服务器最好 ...

  6. c++对象的存储空间

    1. 非静态成员 2. 静态成员变量 静态成员变量不占对象的内存空间 3. 成员函数 成员函数不占内存空间 4. 析构函数 5. 类中有虚析构函数 6. 继承空类和多重继承空类存储空间的计算 7. t ...

  7. jQuery 条件搜索查询 实时取值 升降序排序

    一.鼠标点击获取搜索条件中的被选中的值 创建方法  getAttrValue() 方法,每次的 .click 都要调用  function  getAttrValue(){} 例如,把选中的值给到属性 ...

  8. 面向对象学习(python)

    面向对象总结 一.面向对象与面向过程的区别 面向过程:根据业务逻辑从上到下写垒代码 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 1.面向过程编程: 概念:发过程中最常见的操作就是粘贴 ...

  9. 读取FTP上的某个文本文档内容到本地

    /// <summary> /// 读取FTP服务器文本内容 /// </summary> /// <param name="strPath"> ...

  10. TP5框架,开源小程序商城源码,前端+后台完整版

    CRMEB微信公众号商城小程序商城数据同步,带积分.优惠券.秒杀.砍价.分销等功能,更是一套方便二次开发的框架 开源地址:https://github.crmeb.net/u/crmeb 商城演示后台 ...