本文详细介绍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服务开发相关推荐

  1. windows服务开发(一、安装)

    最近由于工作需要,写了一个windows服务程序,有许多经验,我会陆续写出来. 请原谅我从安装谈起,因为我一直有一个误区:只要从System.ServiceProcess.ServiceBase继承一 ...

  2. windows 服务开发教程

    一. window服务是什么 当你单击"开始",执行"services.msc"命令.就会看见如下窗口.它显示的是当前操作系统中系统自带的服务或者第三方软件安装 ...

  3. WINDOWS服务开发

    1.查看系统日志:控制面板\所有控制面板项\管理工具\计算机管理 2.windows服务的实现: 资料:msdn->system service->services. http://msd ...

  4. C#windows服务开发

    一,SC命令创建和卸载windows服务 创建服务的命令格式: sc [servername] create Servicename [Optionname= Optionvalues] server ...

  5. .NET Windows服务开发流程

    前段时间做一个数据迁移项目,刚开始用B/S架构做的项目,但B/S要寄存在IIs中,而IIs又不稳定因素,如果重启IIs就要打开页面才能运行项目.有不便之处,就改用Windows服务实现.这篇就总结下, ...

  6. 利用vs.net快速开发windows服务(总结)

    引用 http://www.cnblogs.com/lovecherry/archive/2005/03/25/125527.html 在很多应用中需要做windows服务来操作数据库等操作,比如 ( ...

  7. vs2015开发Windows服务

    工作已经很久,时隔这么长时间写这篇文章是给自己以后做参考.也不至于以后长时间不写Windows服务而忘记整个开发过程.windows服务开发,基础的就不说了,直接上过程. 1.新建windows服务项 ...

  8. .NET开发Windows服务

    一.概述 本文旨在简单论述如何开发Windows服务程序. 服务名称:ServiceTest 实验环境:VS2015 最终程序结构: 二.步骤 1.创建一个项目,选择Windows 服务,更改项目名称 ...

  9. C#开发人员能够可视化操作windows服务

    使用C#开发自己的定义windows服务是一个很简单的事.因此,当.我们需要发展自己windows它的服务.这是当我们需要有定期的计算机或运行某些程序的时候,我们开发.在这里,我有WCF监听案例,因为 ...

最新文章

  1. IOS --app微信支付
  2. java实现压缩图片的方法
  3. Java游戏开发框架LGame-0.2.6发布(含PC及Android版)
  4. html参数转义字符,Html转义字符 获得请求参数
  5. 2016SEM行业现状
  6. 计算机网页文档无法复制怎么办,关于电脑浏览器网页不能复制网页文字的恢复教程...
  7. 史上最好听的十首纯音乐推荐
  8. c盘扩容提示簇被标记_如何解决C盘爆满
  9. 直播提醒|今晚八点半,最硬核情感分析技术讲解来袭!内附SKEP详解+大作业指导!...
  10. win10 家庭版安装 docker报requires windows 10 pro/enterprise (15063+) or windows 10 home (19018+)
  11. プログラム・ライブラリ
  12. 【报错】ImportError: libpng16-57e5e0a0.so.16.37.0: cannot open shared object file: No such file or direc
  13. 用最科学的方法展示最形象的图表——前端数据可视化实践
  14. 扩展Euclidean算法求乘法逆原理详解与算法实现
  15. 汪子嵩:论有、存在与是(如是——真如)
  16. 2021修水高考成绩查询,修水中考成绩查询2021
  17. 用Yolact模型训练自己的数据集
  18. vite创建ts项目定义变量无法类型检测
  19. STM32f10x晶振及系统时钟频设置
  20. Ubuntu安装飞书

热门文章

  1. 永续合约_杠杆合约_合约交易基础知识
  2. fopen函数的用法示例_使用示例的C语言中的fopen()函数
  3. 柱纵向钢筋长度计算机械连接,框架柱钢筋下料长度计算第三章.ppt
  4. 取整函数access_ACCESS基本函数大全.doc
  5. 复变函数与积分变换系列(一) - 复变函数与解析函数
  6. 复变函数不挂科——3小时学完复变函数与积分变换(猴博士复变函数学习笔记1)
  7. 长寿命激光在线测径仪 关键看细节
  8. vue-pdf实现预览pdf文件以及含有电子印章的pdf文件
  9. centos7 安装ntfs-3g
  10. Latch Enqueue Hash Chains Doc ID 445076 1