.net Windows服务开发
本文详细介绍Windows服务的开发与部署
一、服务项目搭建
1.新建一个Windows服务项目
然后会自动打开我们所添加服务的设计模式。
在解决方案管理器中右键Service1.cs,重命名为MyServices.cs
点击“单击此处切换到代码视图”或者在解决方案资源管理器中展开MyService.cs,双击MyService进入服务代码视图。
2.定时任务服务的一般通用模版
一般来说服务用于执行一些定时任务。因此服务中常用到的代码就是定时器了,在MyService中添加定时业务代码,即,在OnStart中创建并启动定时器,这块代码可以作为定时任务服务的通用的处理模版。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;
using System.Timers;namespace MyService
{public partial class MyService : ServiceBase{public MyService(){InitializeComponent();}protected override void OnStart(string[] args){// TODO: 在此处添加代码以启动服务。var timer = new Timer(1000 * 60) { AutoReset = true, Enabled = true }; //间隔1分钟timer.Elapsed += timer_Elapsed;timer.Start();}protected override void OnStop(){}private static bool IsExec = false;//定义服务是否正在运行状态private void timer_Elapsed(object sender, ElapsedEventArgs e){//执行定时任务var interval_time = Convert.ToInt32(ConfigurationManager.AppSettings["IntervalTime"] ?? "3");if (DateTime.Now.Minute % interval_time == 0 && !IsExec)//每隔3分钟执行一次//if (DateTime.Now.Hour==0 && DateTime.Now.Minute == 0 && !IsExec)//每天0点0分执行{try{IsExec = true;//你的业务代码//DoSomething();}catch (Exception ex){//抛出错误或者打印日志,注意:如果catch到异常服务会卡住(因为IsExec值为true不再改变),可根据自己业务需要是否加finally处理//LogHelper.Error("执行定时任务出错!" + ex.Message);}//finally//{// //IsExec = false;//}IsExec = false;}}}
}
tips:如果定时任务的间隔为分钟,并不是每分钟的0秒去执行timer_Elapsed方法的,而是以启动服务时的时间为准。比如,间隔为1分钟,服务启动时为09:05:30,那么每次执行timer_Elapsed方法的时间都是每分钟的30秒,而不是0秒。
二、Windows服务的部署
1.定义服务的名称和描述,以及服务的运行账户
在服务的设计模式视图中“右键→添加安装程序”,会自动添加一个安装程序文件,名称为ProjectInstaller.cs
在ProjectInstaller.cs的设计视图中,serviceInstaller控制服务的名称描述等相关内容,serviceProcessInstaller控制服务运行的账户。
(1)serviceInstaller属性配置
右键serviceInstaller1→属性
我们需要重点关注的是这三个属性,
ServiceName:服务名称,简单来说就是服务在操作系统中的名称,即系统任务管理器中该服务的进程名称。
DisplayName:展示名称,说明见下图
Description:服务描述说明,说明见下图
DisplayName和Description
使用Win+R,输入services.msc,打开系统的服务管理器
一般来说ServiceName和DisplayName保持一致即可,可以加统一公司前缀,这样多个服务时便于查找。Description服务描述一定要写的,便于运维人员进行维护(没有描述的服务可能会被运维当初垃圾服务干掉)。
(2)serviceProcessInstaller属性配置
右键serviceProcessInstaller1→属性
我们需要重点关注的就一个Account属性,改属性默认值是User(这里是个坑,因为选择为User的服务在启动时需要输入账户用户名和密码),这里我们需要调整为LocalService即可。
2.服务的安装
windows服务的安装需要使用到InstallUtil.exe,这个文件路径如下,
InstallUtil.exe(x86) C:\Windows\Microsoft.NET\Framework\v4.0.30319
InstallUtil.exe(x64) C:\Windows\Microsoft.NET\Framework64\v4.0.30319
使用x86安装还是x64安装取决与项目配置,右键项目,选择属性
为方便期间,我们把项目对应的InstallUtil.exe拷贝到我们的项目中。
同理再新建两个2个bat文件用于安装和卸载服务,也拷贝到项目中去
Install.bat
%~dp0InstallUtil.exe %~dp0项目名称.exe
Net Start 服务名称
sc config 服务名称 start= auto
pause
Uninstall.bat
%~dp0InstallUtil /u %~dp0项目名称.exe
pause
项目名称:该WinService服务项目的名称
服务名称:是serviceInstaller1中配置的ServiceName
把这3个文件粘贴到项目中以后,选中,右键属性
复制到输出目录,选择始终复制。
右键项目,生成,然后到项目目录下的打开bin文件夹,根据生成方式,选择Debug/Release文件夹
将里边的内容拷贝到服务器。执行Install.bat即可进行安装
注意,win2008及以上系统,执行安装卸载bat需要管理员权限运行:即右键Install.bat/Uninstall.bat→以管理员身份运行。
.net Windows服务开发相关推荐
- windows服务开发(一、安装)
最近由于工作需要,写了一个windows服务程序,有许多经验,我会陆续写出来. 请原谅我从安装谈起,因为我一直有一个误区:只要从System.ServiceProcess.ServiceBase继承一 ...
- windows 服务开发教程
一. window服务是什么 当你单击"开始",执行"services.msc"命令.就会看见如下窗口.它显示的是当前操作系统中系统自带的服务或者第三方软件安装 ...
- WINDOWS服务开发
1.查看系统日志:控制面板\所有控制面板项\管理工具\计算机管理 2.windows服务的实现: 资料:msdn->system service->services. http://msd ...
- C#windows服务开发
一,SC命令创建和卸载windows服务 创建服务的命令格式: sc [servername] create Servicename [Optionname= Optionvalues] server ...
- .NET Windows服务开发流程
前段时间做一个数据迁移项目,刚开始用B/S架构做的项目,但B/S要寄存在IIs中,而IIs又不稳定因素,如果重启IIs就要打开页面才能运行项目.有不便之处,就改用Windows服务实现.这篇就总结下, ...
- 利用vs.net快速开发windows服务(总结)
引用 http://www.cnblogs.com/lovecherry/archive/2005/03/25/125527.html 在很多应用中需要做windows服务来操作数据库等操作,比如 ( ...
- vs2015开发Windows服务
工作已经很久,时隔这么长时间写这篇文章是给自己以后做参考.也不至于以后长时间不写Windows服务而忘记整个开发过程.windows服务开发,基础的就不说了,直接上过程. 1.新建windows服务项 ...
- .NET开发Windows服务
一.概述 本文旨在简单论述如何开发Windows服务程序. 服务名称:ServiceTest 实验环境:VS2015 最终程序结构: 二.步骤 1.创建一个项目,选择Windows 服务,更改项目名称 ...
- C#开发人员能够可视化操作windows服务
使用C#开发自己的定义windows服务是一个很简单的事.因此,当.我们需要发展自己windows它的服务.这是当我们需要有定期的计算机或运行某些程序的时候,我们开发.在这里,我有WCF监听案例,因为 ...
最新文章
- IOS --app微信支付
- java实现压缩图片的方法
- Java游戏开发框架LGame-0.2.6发布(含PC及Android版)
- html参数转义字符,Html转义字符 获得请求参数
- 2016SEM行业现状
- 计算机网页文档无法复制怎么办,关于电脑浏览器网页不能复制网页文字的恢复教程...
- 史上最好听的十首纯音乐推荐
- c盘扩容提示簇被标记_如何解决C盘爆满
- 直播提醒|今晚八点半,最硬核情感分析技术讲解来袭!内附SKEP详解+大作业指导!...
- win10 家庭版安装 docker报requires windows 10 pro/enterprise (15063+) or windows 10 home (19018+)
- プログラム・ライブラリ
- 【报错】ImportError: libpng16-57e5e0a0.so.16.37.0: cannot open shared object file: No such file or direc
- 用最科学的方法展示最形象的图表——前端数据可视化实践
- 扩展Euclidean算法求乘法逆原理详解与算法实现
- 汪子嵩:论有、存在与是(如是——真如)
- 2021修水高考成绩查询,修水中考成绩查询2021
- 用Yolact模型训练自己的数据集
- vite创建ts项目定义变量无法类型检测
- STM32f10x晶振及系统时钟频设置
- Ubuntu安装飞书
热门文章
- 永续合约_杠杆合约_合约交易基础知识
- fopen函数的用法示例_使用示例的C语言中的fopen()函数
- 柱纵向钢筋长度计算机械连接,框架柱钢筋下料长度计算第三章.ppt
- 取整函数access_ACCESS基本函数大全.doc
- 复变函数与积分变换系列(一) - 复变函数与解析函数
- 复变函数不挂科——3小时学完复变函数与积分变换(猴博士复变函数学习笔记1)
- 长寿命激光在线测径仪 关键看细节
- vue-pdf实现预览pdf文件以及含有电子印章的pdf文件
- centos7 安装ntfs-3g
- Latch Enqueue Hash Chains Doc ID 445076 1