使用TopSelf创建自宿主的Windows服务程序
在传统的Windows服务开发过程中,需要添加一个服务安装程序,里面写安装,启动和停止服务等逻辑。现在,使用TopSelf可以简化这个过程。具体请看官网说明:
http://docs.topshelf-project.com/en/latest/index.html
开始前,先创建一个控制台程序,添加 Topshelf 程序包引用:
Install-Package Topshelf
首先,继承 ServiceControl 写一个应用服务类:
internal class AppService : ServiceControl
{
ILog log = LogManager.GetLogger(typeof(AppService)); public void Initialize()
{
log.Info("Initialize");
Console.WriteLine("Engine starting....");
EngineContext.Initialize(false); Console.WriteLine("Engine started");
} public bool Start(HostControl hostControl)
{
Console.WriteLine("Hosts starting....");
ServiceHostHelper.OpenWcfService(); Console.WriteLine("Hosts started");
return true;
} public bool Stop(HostControl hostControl)
{
ServiceHostHelper.CloseWcfService();
return true;
}
}
然后,在主程序里面,写如下代码:
static void Main(string[] args)
{
try
{
HostFactory.Run(x =>
{
x.RunAsLocalSystem();
x.StartAutomatically();
//x.StartManually();
var defaultName = GetDefaultServiceName();
var config = DXNConfig.Current.AppServer;
x.SetServiceName("我的服务1");
x.SetDisplayName("我的服务1");
x.SetDescription("我的服务1描述"); x.Service(factory =>
{
var service = new AppService();
service.Initialize();
return service;
});
});
}
catch (Exception ex)
{
try
{
LogManager.GetLogger(typeof(Program)).Fatal("AppServer launch error", ex);
}
catch
{
}
//throw;
} }
}
这些服务名称性信息是可以修改的。
好了,现在编译,我们的程序就可以当服务使用了。
之后,就可以用命令行来安装服务:
@echo off %~d0
cd %~dp0 cd.. rem ApplicationServer.exe install -servicename "ApplicationServer" -displayname "ApplicationServer" -description "XX业务管理系统"
ApplicationServer.exe install
@echo 启动服务...
ApplicationServer.exe start
echo 启动结束
启动服务:
sc start "ApplicationServer"
停止服务:
sc stop "ApplicationServer"
卸载服务:
ApplicationServer.exe uninstall
运行第一个启动服务的批处理文件,将输出下面的内容:
Configuration Result:
[Success] Name DEV_DXN_ApplicationServer
[Success] DisplayName ApplicationServer
[Success] Description XXX业务管理系统
[Success] ServiceName ApplicationServer
Topshelf v3.0.105.0, .NET Framework v4.0.30319.34014 正在运行事务处理安装。 正在开始安装的“安装”阶段。
Installing DXN ApplicationServer service
正在安装服务 DXN_ApplicationServer...
已成功安装服务DXN_ApplicationServer。
正在日志 Application 中创建 EventLog 源 ApplicationServer... “安装”阶段已成功完成,正在开始“提交”阶段。 “提交”阶段已成功完成。 已完成事务处理安装。 启动服务...
Configuration Result:
[Success] Name DXN_ApplicationServer
[Success] DisplayName ApplicationServer
[Success] Description XX管理系统
[Success] ServiceName ApplicationServer
Topshelf v3.0.105.0, .NET Framework v4.0.30319.34014
The ApplicationServer service is not installed.
过程全部完成。
使用TopSelf创建自宿主的Windows服务程序的更多相关文章
- 使用Topshelf创建自宿主的Windows服务程序
在传统的Windows服务开发过程中,需要添加一个服务安装程序,里面写安装,启动和停止服务等逻辑.现在,使用TopSelf可以简化这个过程.具体请看官网说明: http://docs.topshelf ...
- .net Windows服务程序和安装程序制作图解 及 VS 2010创建、安装、调试 windows服务(windows service)
.net Windows服务程序和安装程序制作 最近项目中用到window服务程序,以前没接触过,比较陌生,花了两天的时间学习了下,写了个简单的服务,但在制作安装程序的时候,参照网上很多资料,却都制作 ...
- 创建一个Windows服务程序与实现定时器效果
1.创建一个Windows服务程序 一. 新建Window服务项目 二. 添加安装程序 三. 配置服务属性 四. 编写定时器代码 publicpartialclassService1 ...
- C#/.NET基于Topshelf创建Windows服务程序及服务的安装和卸载(极速,简洁)
本文首发于:码友网--一个专注.NET/.NET Core开发的编程爱好者社区. 文章目录 C#/.NET基于Topshelf创建Windows服务的系列文章目录: C#/.NET基于Topshelf ...
- 用Visual C#创建Windows服务程序
一.Windows服务介绍: Windows服务以前被称作NT服务,是一些运行在Windows NT.Windows 2000和Windows XP等操作系统下用户环境以外的程序.在以前,编写Wind ...
- 用C/C++创建windows服务程序
转载:https://blog.csdn.net/chenyujing1234/article/details/8023816 一.演示过程下方代码演示了如何使用vs(C/C++)创建windows服 ...
- C# 创建、安装和卸载Windows服务程序
1.新建一个windows服务程序. 2.点击这个服务类,从工具箱中加入一个Timer控件,右键这个Timer控件 命名为 timerOrderDeductionDetailJob,Enable设为T ...
- WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一)
上接 WCF学习之旅—WCF服务部署到IIS7.5(九) WCF学习之旅—WCF服务部署到应用程序(十) 七 WCF服务的Windows 服务程序寄宿 这种方式的服务寄宿,和IIS一样有一个一样 ...
- WCF服务二:创建一个简单的WCF服务程序
在本例中,我们将实现一个简单的计算服务,提供基本的加.减.乘.除运算,通过客户端和服务端运行在同一台机器上的不同进程实现. 一.新建WCF服务 1.新建一个空白解决方案,解决方案名称为"WC ...
随机推荐
- iOS--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook等系统服务开发汇总
iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用系统应用.使用系统服务: ...
- c#运算表达式
1.取补运算 操作符:~ 操作数:限定int,uint,long,ulong和枚举类型,返回值于操作数类型相同 sbyte,byte,short,ushort,也可以运算,但运算前都将隐式转换为int ...
- 深入理解javascript对象系列第三篇——神秘的属性描述符
× 目录 [1]类型 [2]方法 [3]详述[4]状态 前面的话 对于操作系统中的文件,我们可以驾轻就熟将其设置为只读.隐藏.系统文件或普通文件.于对象来说,属性描述符提供类似的功能,用来描述对象的值 ...
- IDDD 实现领域驱动设计-一个简单业务用例的回顾和理解
上一篇:<IDDD 实现领域驱动设计-由贫血导致的失忆症> 这篇博文是对<实现领域驱动设计>第一章后半部分内容的理解. Domain Experts-领域专家 这节点内容是昨天 ...
- Cookbook of QUnit
本篇文章是QUnit的简介,可以作为很好的入门教程.文章原址 介绍 自动化测试时软件开发过程中必不可少的一部分,而单元测试则是自动化测试的最为基本的一块,软件的每一个组件, 每一个功能单元都需要经过不 ...
- Java位运算总结-leetcode题目
按位操作符只能用于整数基本数据类型中的单个bit中,操作符对应表格: Operator Description & 按位与(12345&1=1,可用于判断整数的奇偶性) | 按位或 ^ ...
- RMAN Catalog创建、配置和管理
环境:RHEL6.4 + Oracle 11.2.0.4 一.创建数据库catdb 1.1 官档的建库脚本示例 1.2 根据我实际环境修改如下项 1.3 创建必要目录并赋予权限 1.4 执行脚本建库 ...
- HTML基本元素(一)
HTML基本元素(一) 1.换行符 <br /> Ps:br 是换行(Break)的缩写,文本会在这个标签的地方换行. 实例: 第一行<br />第二行 2.段落 <p& ...
- [Java 基础]基础语法
Java代码基本规范 大小写敏感:Java是大小写敏感的,这就意味着标识符Hello与hello是不同的. 类名:对于所有的类来说,类名的首字母应该大写.如果类名由若干单词组成,那么每个单词的首字母应 ...
- Mysql并发时经典常见的死锁原因及解决方法
1. mysql都有什么锁 MySQL有三种锁的级别:页级.表级.行级. 表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最高,并发度最低. 行级锁:开销大,加锁慢:会出现死锁 ...