在传统的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. JavaScript概述-第1章

    目录 初始JavaScript 学会使用编辑工具 如何引入脚本代码 常用语句 常见浏览器兼容性问题 了解前端开发技术JavaScript,JavaScript的发展,JavaScript特点,Java ...

  2. [CocoaPods]终端方式加载第三方库

    终端方式集成第三方库 1.打开终端,转到当前工程所在的文件夹. 方式一: [访达]->[服务]->[系统偏好设置] ->勾选[新建位于文件夹位置的终端标签 ]和[新建位于文件夹位置的 ...

  3. 修改hosts文件用来观看coursera视频

    52.84.246.90 d3c33hcgiwev3.cloudfront.net 52.84.246.252 d3c33hcgiwev3.cloudfront.net 52.84.246.144 d ...

  4. BonnMotion支持的几种移动模型

    BonnMotion是一款基于java的移动场景产生和分析工具,常用来研究mobile ad hoc network的特征.其产生的移动场景可以导入到几款网络模拟器中进行模拟分析,例如:NS2,NS3 ...

  5. 用eclipse导入打war包的maven项目

    最近遇到Maven管理下的Spring MVC项目,组内某位将项目代码扔过来,一脸懵逼(囧),查阅了一些资料后终于将此项目运行通了(>_<),特此记录下来与各位分享. 通俗的来说,Mave ...

  6. C语言第十二讲,文件操作.

    C语言第十二讲,文件操作. 一丶文件操作概述 在操作系统中,我们的文档都称为文件.操作系统也为我们提供了接口进行操作.不同语言都是使用的相同的接口,只不过封装的上层接口不一样 操作文件的步骤 打开文件 ...

  7. JavaWeb学习 (二十一)————基于Servlet+JSP+JavaBean开发模式的用户登录注册

    一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...

  8. JavaWeb学习 (九)————HttpServletRequest对象(一)

    一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象 ...

  9. Java语法之注解

    注解其实在其他语言也有,只是叫法不一样,在C#中叫特性,其实都是一个意思.今天就是了解下Java的注解. 一.什么是注解 我们先看官方解释:它提供了一种安全的类似注释的机制,用来将任何的信息或元数据( ...

  10. loadrunner:Action.c(4): Error -27796: Failed to connect to server "192.168.66.3:8080": [10060] Connection timed out

    Action.c(4): Error -27796: Failed to connect to server "192.168.66.3:8080": [10060] Connec ...