在传统的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.

过程全部完成。

使用Topshelf创建自宿主的Windows服务程序的更多相关文章

  1. 使用TopSelf创建自宿主的Windows服务程序

    在传统的Windows服务开发过程中,需要添加一个服务安装程序,里面写安装,启动和停止服务等逻辑.现在,使用TopSelf可以简化这个过程. 首先,继承 ServiceControl 写一个应用服务类 ...

  2. C#/.NET基于Topshelf创建Windows服务程序及服务的安装和卸载(极速,简洁)

    本文首发于:码友网--一个专注.NET/.NET Core开发的编程爱好者社区. 文章目录 C#/.NET基于Topshelf创建Windows服务的系列文章目录: C#/.NET基于Topshelf ...

  3. 使用Topshelf创建Windows服务

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

  4. [Solution] Microsoft Windows 服务(2) 使用Topshelf创建Windows服务

    除了通过.net提供的windows服务模板外,Topshelf是创建Windows服务的另一种方法. 官网教程:http://docs.topshelf-project.com/en/latest/ ...

  5. Topshelf创建Windows服务

    使用Topshelf创建Windows服务 概述 Topshelf是创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps ...

  6. 【第三方插件】使用Topshelf创建Windows服务

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

  7. C#/.NET基于Topshelf创建Windows服务的守护程序作为服务启动的客户端桌面程序不显示UI界面的问题分析和解决方案

    本文首发于:码友网--一个专注.NET/.NET Core开发的编程爱好者社区. 文章目录 C#/.NET基于Topshelf创建Windows服务的系列文章目录: C#/.NET基于Topshelf ...

  8. 使用Topshelf创建Windows服务[转载]

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

  9. .net Windows服务程序和安装程序制作图解 及 VS 2010创建、安装、调试 windows服务(windows service)

    .net Windows服务程序和安装程序制作 最近项目中用到window服务程序,以前没接触过,比较陌生,花了两天的时间学习了下,写了个简单的服务,但在制作安装程序的时候,参照网上很多资料,却都制作 ...

随机推荐

  1. Baidu WebUploader 前端文件上传组件的使用

    简介 WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流I ...

  2. Android精通:View与ViewGroup,LinearLayout线性布局,RelativeLayout相对布局,ListView列表组件

    UI的描述 对于Android应用程序中,所有用户界面元素都是由View和ViewGroup对象构建的.View是绘制在屏幕上能与用户进行交互的一个对象.而对于ViewGroup来说,则是一个用于存放 ...

  3. Java学习笔记53(网络编程:TCP协议案例)

    简易的案例 客户端: package demo; import java.io.IOException; import java.io.InputStream; import java.io.Outp ...

  4. 在notepad++中使用正则匹配功能(一-龥!-~) 中文[利刃篇]

    用正则时间越久,人就越懒,就越知道正则的强大.正则,不只是在代码里用到,在字符查找是也会用到,学会适当使用正则,将会使你的工作事办功倍!但是,中文却是一个砍,不容易过. 于是在用notepad++,也 ...

  5. MySQL 线程池&连接池&长连接&短连接

    线程池 简介 1.mysql每连接每线程,mysql都分配一个单独的线程,该线程处理客户端发来的所有命令 2.每个线程会占用一定的系统资源,线程数越多消耗的系统资源也越多 3.线程的创建和销毁有一定的 ...

  6. Ubuntu 18.0.4安装Mongodb

    2.21更新: 安装后本地通过robo 3T连接正常,但是其它机器通过IP连接时报错,继续查找,解决方案在这里(传送门),原因是mongodb安装完成后默认监听本地地址,也就是127.0.0.1,这样 ...

  7. 抽象语法树(AST)

    AST描述 在计算机科学中,抽象语法树(AST)或语法树是用编程语言编写的源代码的抽象语法结构的树表示.树的每个节点表示在源代码中出现的构造.语法是“抽象的”,因为它不代表真实语法中出现的每个细节,而 ...

  8. HDU 6022---MG loves set(K-D树)

    题目链接 Problem Description MG is an intelligent boy. One day he was challenged by the famous master ca ...

  9. Linux学习笔记之十————Linux常用服务器构建之ftp服务器

    p服务器介绍 FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”. 用于Internet上的控制文件的双向传输. 同时,它也是一个应用程序(Ap ...

  10. epel安装第三方扩展源后,运行yum报错的解决方案

    yum安装报错:Cannot retrieve metalink for repository: epel. Please verify its path and try again 解决方法: 一句 ...