新建第一个windows服务(Windows Service)

  首先,请原谅我是一个小白,一直到前段时间才在工作需要的情况下写了第一个windows服务。首先说一下为什么写这个windows服务吧,也就是什么需求要我来写这么一个东西。公司的项目中,需要一个预警功能(从数据库里取出需要的日期,在这个日期的前两天向相应的用户以短信的形式发出提醒)。因为不是一个日期,并且日期不是固定的。所以需要每一天都要在规定的时间向服务器发出请求,这需要后台自动执行的事件。我一直觉得这种功能很牛X的,就因为它们是自动执行的,哈哈。最后就用到了这么这个没有写过的windows服务。其实前面在做这个项目的时候,也遇到了类似的事情(小区居民回复物业系统发出的短信,比如短信投票),需要及时接受并且做出相应的回复或操作。为了解决这个问题我是做了一个定时器放在Global.asax文件里的。但是这中方法有个弊端,就是需要启动项目才能让计时器跑起来,而Windows Service就完美的解决了这个问题。只要在服务器上启动服务,不管项目是否运行,服务里的程序依然可以运行。啰啰嗦嗦的也不知道讲清楚没有,开始记录新建Windows Service的过程吧。

  因为是新建第一个Windows Service,所以很艰难,一个字——累!因为周围的同事、同学因为工作原因基本上都很少接触这个东西。首先百度了方法,在这里也详细记录下来,请原谅,因为我脑袋的内存小,怕以后不知道怎么做,只能详细的记录了。哦,我用的是asp.net。

1.首先创建一个空的解决方案,主要是记录windows服务,所以asp.net里面什么也没有操作

 

2.新建windows服务

 

3.在windows服务内编写程序,首先切换到Service1的代码视图,从代码中两个程序已经自动生成的两个方法名字可以看出,OnStart()为开始,OnStop()为结束。其实还有暂停OnPause(),继续OnContinue()两个方法。

 1 namespace WindowsService
 2 {
 3     public partial class Service1 : ServiceBase
 4     {
 5         public Service1()
 6         {
 7             InitializeComponent();
 8         }
 9 
10         //启动服务时执行
11         protected override void OnStart(string[] args)
12         {
13         }
14         //停止服务时执行
15         protected override void OnStop()
16         {
17         }
18     }
19 }

 

我把我的代码贴出来吧

 1 namespace WinService
 2 {
 3     public partial class Service1 : ServiceBase
 4     {
 5         public Service1()
 6         {
 7             InitializeComponent();
 8         }
 9 
10         System.Timers.Timer timer = new System.Timers.Timer();
11         common com = new common();
12         SMS sms = new SMS();
13         protected override void OnStart(string[] args)
14         {
15             timer.Enabled = true;
16             timer.Interval = 60000;//执行间隔时间,单位为毫秒    每分钟执行一次
17             timer.Start();
18             timer.Elapsed += new System.Timers.ElapsedEventHandler(Timer1_Elapsed);
19         }
20 
21         protected override void OnStop()
22         {
23             timer.Enabled = false;
24         }
25 
26         private void Timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
27         {
28             int intHour = e.SignalTime.Hour;    //获得当前的小时
29             int intMinute = e.SignalTime.Minute;    //获得当前的分钟
30             int intSecond = e.SignalTime.Second;    //获得当前的秒
31 
32             /*每分钟执行一次*/
33             //更新投票结束状态
34             com.updateVoteState();
35             //短信
36             sms.SMSVote();
37             /*每分钟执行一次*/
38 
39             // 每天的10:30执行这个方法
40             int iHour = 10;
41             int iMinute = 30;
42             if (intHour == iHour && intMinute == iMinute )
43             {
44                 //预警功能
45                 com.Warning();
46             }
47         }
48 
49     }
50 }

我在服务里面放了,每分钟执行的方法,有每天只需的方法。

4.要实现的功能都写好了,下面是添加服务的安装程序了。首先添加

在工具箱中找到serviceProcessInstaller和serviceInstaller,并添加到Installer.cs中

 

设置serviceInstaller

设置serviceProcessInstaller

 

5.前的都做好了,服务基本上就完成了,最后一步就是注册了。前边的在网上的各位大神的帮助下很顺利的完成了,就是在注册这里把我难到了,一直失败一直失败,弄到我都没有脾气了。百度新建windows服务,大部分后面的注册介绍的方法是这样的。
   (1)打开命令提示
 (2)输入installutil  C:\Users\win10\Documents\Visual Studio 2012\Projects\WindowsService\bin\Debug\WindowsService.exe(安装)。
          或者是 输入C:\Windows\Microsoft.NET\Framework\v4.0.30319(安装)

  这些方法好像在win7上可以安装成功,可是我安装的是win10的就悲催了,怎么都不能实现。最后还是一个同学做过,告诉了我一种方法

  (1)以管理员身份运行命令提示
  (2)输入sc create test binPath="C:\Users\win10\Documents\Visual Studio 2012\Projects\WindowsService\bin\Debug\WindowsService.exe"(注册)
    sc start test(启动)
    sc start test   (启动服务)
    sc stop test   (停止服务)
    sc delete test  (从注册表删除服务)

  另外,服务的名称不知道是不是必须是解决方面的名字哦,我用其它的好像都不行,没有认真的去试这个。不知道为什么百度新建windows服务是就是没有找到这种注册服务的方法,百度sc create是就都出现了,所以在注册这里把弄的很狼狈。  下面这样一段是我在百度百科上看到的,可以参考一下

  Sc create 是Windows DOS命令,用于创建Windows服务。适用于:Windows 7,Windows Server 2003,Windows Server 2003 R2, Windows Server 2003 with SP1, Windows Server 2003 with SP2,Windows Server 2008, Windows Server 2008 R2,Windows Vista。 

 

转载于:https://www.cnblogs.com/chen0901/p/5529133.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/403685.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python获取电脑硬件信息及状态的实现方法

From: http://www.jb51.net/article/54470.htm 这篇文章主要介绍了Python获取电脑硬件信息及状态的实现方法,是一个很实用的技巧,需要的朋友可以参考下本文以实例形式展示了Python获取电脑硬件信息及状态的实现方法,是Python程序设计中很有实用价值的技巧。分享给大…

通过类或ID记录上一个被选中的标签或者数字

通过类或ID记录上一个被选中的标签或者数字 $(function () {$(document).on(click, .navbar-nav li a, function (e) {var $parant $(.navbar-nav li).index($(.navbar-nav li.active))var $index $(.navbar-nav li a).index(this)console.log($parant,$index);})})

windows2008下配置iis时出现错误“由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。”...

iis7配置php的时候配置完后可以访问php页面,但是重启后就出现403,“由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。” 检查后发现cgi.exe处于禁用状态&…

Windows PowerShell安装指定版本vue/cli脚手架失效解决办法;vue : 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\vue

mac搭建vue项目看这篇 打开shift——鼠标右键,就可以打开Windows PowerShell 1.安装vue/cli npm install -g vue/cli3.12.0 后面是版本号 2.安装完成后查看 使用过 vue -V 查看vue/cli版本号 (如果查看找不到版本,使用命令行创建项目vue …

android图片压缩上传系列-基础篇

开发中遇到需要上传图片的场景还是很常见的,这就涉及到图片的压缩处理。如果不进行压缩,势必造成消耗大量的流量,下载图片的速度慢等。 关于android如何压缩,网上的资料也是很多,但大多数都是代码片段,讲解…

openfire 的配置文件

eclipse 编译openfire&#xff0c;openfire 的配置文件在 openfire\target\openfire\conf\openfire.xml 中&#xff0c; <?xml version"1.0" encoding"UTF-8" ?> - <!-- This file stores bootstrap properties needed by Openfire.Proper…

jq轮播原理及实现

直接开始&#xff0c;HTML CSS部分没备注&#xff0c;JS有 HTML部分 <div style"overflow: hidden;position: relative;left: 0;top: 0;height: 450px;width: 100%"><div id"slider"><div></div><div></div><div…

使用python获取CPU和内存信息的思路与实现(linux系统)

From: http://blog.csdn.net/preterhuman_peak/article/details/40649229 linux里一切皆为文件&#xff0c;在linux/unix的根目录下&#xff0c;有个/proc目录&#xff0c;这个/proc 是一种内核和内核模块用来向进程&#xff08;process&#xff09;发送信息的机制&#xff08…

uni.request接口封装;小程序uni-app接口封装

另一篇请求接口简单封装在api下的index.js 本片资源下载地址 本片封装了post get put请求&#xff0c;重点在request.js文件 1.新增四个文件 2.根目录下的utils下的request.js封装uni.request()请求 注意 &#xff1a;需要根据自己接口的 statusCode 状态码 、数据状态码…

php 功能函数集

1.获取页面闭合带id标签数据 View Code 1 <?php2 header("Content-type: text/html; charsetutf-8"); 3 /**4 * $tag_id HTML tag_id like id"abc"5 * $url web url6 * $tag HTML tag7 * $data HTML data if…

JS prototype作用

prototype可查看原型属性&#xff0c;还可对原型添加属性或方法 function Car(name) {this.name name;this.run function () {console.log(this.heightcm this.name is run!)}}var dazhong new Car(dazhong);Car.prototype.height null; //给对象添加新属性…

高性能并发TCP网络服务-IOCP框架修正VC2008版本

From: http://blog.csdn.net/lsfa1234/article/details/6223635 高性能并发TCP网络服务IOCP框架修正VC2008版本 从Source Code里可发现&#xff0c;此工程整合的epoll&#xff0c;iocp及kqueue三种模型&#xff0c;应该是非常有用的一个东东&#xff08;如果ACE能够把它的那些…

解决uni-app小程序图片转base64;微信小程序上传图片转base64;

base64转微信小程序图片 点击看这篇 以下是小程序图片转base64&#xff1a; uni.chooseImage({count: 6, //默认9sizeType: [original, compressed], //可以指定是原图还是压缩图&#xff0c;默认二者都有sourceType: [album], //从相册选择success: function (res) {console…

java中byte转换int时为何与0xff进行与运算

另一篇分析如下&#xff1a; byte为什么要与上0xff&#xff1f; 在剖析该问题前请看如下代码 public static String bytes2HexString(byte[] b) {String ret "";for (int i 0; i < b.length; i) {String hex Integer.toHexString(b[ i ] & 0xFF);if (hex.l…

element 增加自由验证

<el-form-item label"社会统一信用代码" prop"socialCode"><el-input v-model"ruleForm.socialCode"></el-input></el-form-item> 主要是validator返回的是对象 rules: {socialCode: [ //社会统一信用代码{requir…

ADempiere 360LTS 地址(Address)的中国格式定制

地址(Address)的中国格式定制AD里面设置合作伙伴&#xff0c;仓库等需要输入地址的地方&#xff0c;目前都是按照美国的习惯&#xff0c;即使国家选择了中国&#xff0c;还是不符合国内习惯&#xff0c;下面通过配置可使地址按照&#xff1a;省、市、详细地址的格式显示1) 国家…

git 配置免密登陆

SSH免密码登录配置 注意&#xff1a;这些命令需要在git bash here中敲 注意先配置好账户名和邮箱 # git config user.name zhangsan # git config user.email zhangsanqq.com # 使用–global参数&#xff0c;配置全局的用户名和邮箱&#xff0c;只需要配置一次即可。推荐配置…

ASP.NET MVC URL重写与优化(初级篇)-使用Global路由表定制URL

ASP.NET MVC URL重写与优化(初级篇)-使用Global路由表定制URL 引言--- 在现今搜索引擎制霸天下的时代&#xff0c;我们不得不做一些东西来讨好爬虫&#xff0c;进而提示网站的排名来博得一个看得过去的流量。 URL重写与优化就是搜索引擎优化的手段之一。 假如某手机网站(基于AS…

js splice

splice(删除数组第几个,删除几个数据) splice(从第几个新增,如果设置为 0&#xff0c;则不会删除项目。,新增的对象)

PHP autoload实践

本文目的 本文简要的描述了PHP提供的autoload机制&#xff0c;以及在scake中使用实践。用于减少不必要的文件包含&#xff0c;提高php系统性能。 什么是__autoload php是脚本语言&#xff0c;不同于c只需要编译一次&#xff0c;php每次执行过程中都需要编译&#xff0c;所以…