分别在.NET Framework 与 .NET Core 框架下 编写Windows Service(windows服务程序)
前言,为什么会分别在两个框架下编写Windows Service,是因为最近在做区块链这块,使用的是NEO(小蚁区块链)的相关技术,NEO使用的是.net core 2.1,业务上需要写两个程序,一个同步数据到本地,一个保持对链上数据的访问。之前一直是用的控制台,但是部署后容易误操作,关闭之类的(实际上一开始就该想到的),所以需要改成windows服务。就用.NET Framework 和.NET Core都试了一下。
IDE:vs2017
.NET Framework 下编写Windows Service
1、创建项目


2、将Service1改名为自己的名称BlockSyncService,并编写自己的程序

3、设置WindowsService的属性
定位到BlockSyncService页面,并查看代码,在OnSatrt()与OnStop()方法中写入对应服务启动与停止的代码。

4、回到BlockSyncService设计页面,右键空白处选择“添加安装程序”


5、右键serviceProcessInstaller1选择属性,设置Account(账户)为LocalSystem;
右键serviceinstaller1选择属性,设置Description(对部署服务的描述)、ServiceName(部署服务的名称)、StartType(服务的启动方式(自启动-Automatic,手动启动-Manual,禁止启动-Disabled等))
设置完后重新生成解决方案。


6、部署服务
以管理员身份运行cmd,输入命令 sc create 服务名称 binPath="程序exe文件的路径" 用于创建服务
注意:出现“[SC] OpenSCManager 失败 5:拒绝访问。” 的错误提示,请使用管理员身份打开命令提示符(cmd)

若没有设置启动方式,也可再输入命令 sc config BlockSyncService start="AUTO" 用于配置服务的启动方式(AUTO-自启动)
配置成功后,输入 net start BlockSyncService 启动服务即可。

7、服务调试
WindowsService 无法直接调试,只能在已经启动服务的情况下,通过附加到进程,从而进行调试。如下图

勾选“显示所有用户”

选择自己的服务进程,并附加

注意:附加到进程是无法调试OnStart()方法的,一般情况下可以把OnStart()中的代码放到OnStop()中执行并调试。调试相对比较麻烦。


最后,win+r 并输入 swevices.msc 进入服务管理界面,右键停止即可触发调试。

.NET Core下编写Windows Service
1、创建一个.net core 控制台项目

2、添加WindowsService项



创建后,会提示错误。这是因为,没有命名空间“System.ServiceProcess.ServiceController”,需要nuget安装。


3、编写自己的程序,设置SBS-RPC-Service.cs中的OnStart()和OnStop(),最后设置Program.cs,重新生成代码。


调试与部署步骤与.NET Framework 的步骤基本一致,只是.net core 需要先发布,在创建服务时 binPath=“发布的.exe程序的路径”,其他的并无区别,这里就不再重复说了。
顺便附一下官方的在 Windows 服务中托管 ASP.NET Core的文档:https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/windows-service?view=aspnetcore-2.1
分别在.NET Framework 与 .NET Core 框架下 编写Windows Service(windows服务程序)的更多相关文章
- Topshelf+Quartz在.Net Core框架下的实现
在我们日常开发工作中,经常会运用到Quartz+Topshelf组件的组合来开发一些定时任务.那么在.Net Core下如何去使用呢?我自己尝试搭建了一个测试项目,过程中遇到了以下一些问题: Quar ...
- .NET CORE 框架ABP的代码生成器(ABP Code Power Tools )使用说明文档
前言 各位好,又是一个多月没更新文章了. 原因嘛,大家都懂的,太忙了~ 临近年末,公司的项目.年会的做技术支持,同事朋友聚餐也比较频繁. 当然视频教程也没有继续更新.我的锅~ 但是这个月好歹抽空做了一 ...
- 一个Mini的ASP.NET Core框架的实现
一.ASP.NET Core Mini 在2019年1月的微软技术(苏州)俱乐部成立大会上,蒋金楠老师(大内老A)分享了一个名为“ASP.NET Core框架揭秘”的课程,他用不到200行的代码实现了 ...
- .NET Framework和 .Net Core实现不一致的API之 `EmailAddressAttribute`
.NET Framework和 .Net Core实现不一致的API之 EmailAddressAttribute Intro 现在我们的类库项目大多是 NETStandard2.0 项目,但是 ne ...
- .NET Framework VS .NET Core
本文对应的原文来至 c-sharpcorner 的一篇文章,文末有链接.如有错误,还请指正. 前言 你会为你的下一个应用程序选择哪一种开发平台 - .NET Framework 或者 .NET Cor ...
- [转]浅谈 .NET Framework 与 .NET Core 的区别与联系
本文转自:http://www.cnblogs.com/huchaoheng/p/6295688.html 2017到了,咱们学点啥啊,要想知道学点啥,先弄清.NET Framework 与 .NET ...
- 浅谈 .NET Framework 与 .NET Core 的区别与联系
2017到了,咱们学点啥啊,要想知道学点啥,先弄清.NET Framework 与 .NET Core 这两个概念 .当今 net 生态系统如下: 从上面图中我们可以看到.net 主要分为三个部分 ...
- NET?.NET Framework?.NET Core?
什么是.NET?什么是.NET Framework?什么是.NET Core? https://www.cnblogs.com/1996V/p/9037603.html 什么是.NET?什么是.NET ...
- C# 读App.config配置文件[2]: .Net Core框架
C# 读App.config配置文件[1]:.Net Framework框架 C# 读App.config配置文件[2]: .Net Core框架 网上都是.net framework读取配置文件的方 ...
随机推荐
- 集训day15 t1 poj3728
[问题描述] 有一颗n个节点的树 每个节点上都有许多奸商在卖东西,第i个奸商的理想价格为vi,即他会以vi的价格购买或卖出一件东西 有m个人希望从树上的某个点走到另一个点,问你在只进行一次买卖(每次仅 ...
- 训练指南 UVA- 11865(有向最小生成树 + 朱刘算法 + 二分)
layout: post title: 训练指南 UVA- 11865(有向最小生成树 + 朱刘算法 + 二分) author: "luowentaoaa" catalog: tr ...
- hdu6049
hdu6049 题意 给出一串由 \([1, n]\) 组成的 \(n\) 个数,每个数字都不相同.现在要尽可能的分成多个块,每个块内的数可以任意排序,且分完块后可以交换两个块的位置,问使得最后序列有 ...
- 【树状数组】Gym - 101147J - Whistle's New Car
题意就是对每个点i,统计在其子树内(不含自身),且depj-depi<=xj的点有多少个. 把点分别按照dep-x和dep进行排序,离线处理, 每次把dep-x小于等于当前dep值的点插入树状数 ...
- 【数论】【最大公约数】【枚举约数】CODEVS 1012 最大公约数和最小公倍数问题 2001年NOIP全国联赛普及组
对于一对数(p,q),若它们的gcd为x0,lcm为y0, 则:p*q/x0=y0,即q=x0*y0/p, 由于p.q是正整数,所以p.q都必须是x0*y0的约数. 所以O(sqrt(x0*y0))地 ...
- java源码阅读Object
1 类注释 Class {@code Object} is the root of the class hierarchy. Every class has {@code Object} as a s ...
- ubuntu下python3及idle3的安装
一.使用以下命令检查自己的系统下是否有python3 python3 --version 如果出现类似“command not found",则说明你需要安装python3.如果能够出现py ...
- iOS使用CoreData实现收藏功能
一般做收藏都是使用数据库或者归档,使用CoreData实现收藏功能就是没事时练一下,实现大概和数据库差不多. 首先创建一个工具类继承NSObject,在里面实现所需要的方法. 工具类的.h文件: ty ...
- HDU 4606 Occupy Cities (计算几何+最短路+二分+最小路径覆盖)
Occupy Cities Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- Ubuntu安装“启动引导器”的设备选哪一项,选默认还是选/boot分区?
如果你要用Ubuntu的引导器代替Windows的引导器,就选 /dev/sda. 如果你要保留Windows的引导器,就选 /boot分区,但这样一来,装完Ubuntu重启后,只能启动Windows ...