新建第一个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,一经查实,立即删除!

相关文章

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 …

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

另一篇请求接口简单封装在api下的index.js 本片资源下载地址 本片封装了post get put请求,重点在request.js文件 1.新增四个文件 2.根目录下的utils下的request.js封装uni.request()请求 注意 :需要根据自己接口的 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…

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…

MS SQLSERVER 各种乱七八糟

2019独角兽企业重金招聘Python工程师标准>>> 这个是看完了sql语法的一点个人练手&#xff0c;没什么价值&#xff0c;权且当做记录 select employee_id,dept_code,last_name,manager_id from l_employees where last_name like %e%--%代表任意字符串 order by dept_…

[C++11 std::thread] 使用C++11 编写 Linux 多线程程序

From: http://www.ibm.com/developerworks/cn/linux/1412_zhupx_thread/index.html 本文讲述了如何使用 C11 编写 Linux 下的多线程程序&#xff0c;如何使用锁&#xff0c;以及相关的注意事项&#xff0c;还简述了 C11 引入的一些高级概念如 promise/future 等。 前言 在这个…

div 背景图 居中

这里主要是 background-position: center;属性很给力 div{width: 100%;height: 100%;background-image: url(../../../assets/initialize.png);background-repeat: no-repeat;background-size:70px 70px;background-position: center;}

CCNA知识总结(一)

什么是路由&#xff1a; 路由就是为了形成“FIB”。 在路由器上分为2大类&#xff1a; 1&#xff09; Coutrol Plane 控制平面就是&#xff1a;“路由协议”&#xff0c;就是为了2个设备之间的交互来形成“FIB”。 2&#xff09; Data Plane 数据平面就是&#xff1a;“Forw…

记录uni-app弹框事件无生命周期问题;uni-popup-dialog打开触发事件;uni-popup-dialog调用接口时机

项目需求&#xff1a;点击页面的 品牌型号 按钮&#xff0c;打开弹框&#xff0c;将 车架号码 参数传入接口获取到对应的 品牌型号列表&#xff0c;在进行选择后关闭弹框。 实际开发中&#xff0c;我在父组件里面引入了弹框子组件&#xff1b;诡异的事情发生了&#xff1a; 在…

最常用的两种C++序列化方案的使用心得(protobuf和boost serialization)

From: http://www.cnblogs.com/lanxuezaipiao/p/3703988.html 导读 1. 什么是序列化&#xff1f; 2. 为什么要序列化&#xff1f;好处在哪里&#xff1f; 3. C对象序列化的四种方法 4. 最常用的两种序列化方案使用心得 正文 1. 什么是序列化&#xff1f; 程序员在编写应用程序…

SCCM 2012系列16 操作系统播发⑤

添加了操作系统映像&#xff0c;也创建了任务序列&#xff0c;那么我们改对创建的任务序列编辑一下了&#xff0c;以满足我们播发下去系统的要求是我们想要的&#xff0c;比如分区是怎么样的&#xff0c;当然分区不是固化的&#xff0c;是按照百分比来进行划分的&#xff0c;详…

vue旋转图片功能,旋转放大图片功能;vue旋转放大div元素

需求&#xff1a;可以旋转、放大、颠倒图片。 html: <div class"imgtop"><img class"imgboxele" id"xingshizhengzhengben" :src"imgurl" alt""></div><div class"imgtxt">行驶证正本<…

xp和win7安装telnet服务

xp&#xff1a; 有些ghost版本的xp会精简掉telnet服务 首先telnet服务需要的几个文件&#xff1a; tlntadmn.exe tlntsess.exe tlntsvr.exe tlntsvrp.dll 文件分享&#xff1a;https://yunpan.cn/cSaaaXjUrKFHu 访问密码 719d 将以上几个文件拷贝到c:\windows\system32下&…

linux centos7.2 nodeJs全局安装

先下载nodeJS 选一个linux版本的http://nodejs.cn/download/ 下载下来得到个node-v8.12.0-linux-x64.tar.xz这样的文件 用xftp上传到服务器你想安装的目录 xftp破解版链接:http://www.xue51.com/soft/1456.html xshell破解版链接:http://www.cncrk.com/downinfo/219821.html …

WebView 和JS 之间交互

2019独角兽企业重金招聘Python工程师标准>>> 1.android中利用webview调用网页上的js代码。 Android 中可以通过webview来实现和js的交互&#xff0c;在程序中调用js代码&#xff0c;只需要将webview控件的支持js的属性设置为true&#xff0c;&#xff0c;然后通过lo…

【libjpeg.lib】在Windows7下编译生成libjpeg.lib

一、准备&#xff1a; 下载最新的jpeg库源码&#xff1a;http://www.ijg.org/files/jpegsr9a.zip 二、编译 1. 解压到指定目录&#xff0c;我是&#xff1a;E:\program\opensource\jpeg-9a-win 2. 打开VS2010命令行窗口(为了得到VS2010的环境)&#xff0c;并切换到E:\program…

uni-app图片加水印;小程序图片添加水印;使用canvas上传图片加水印

原博主&#xff1a;点击查看 需求&#xff1a; 微信小程序&#xff0c;上传图片&#xff0c;成功后图片有水印&#xff0c;既图片的网络地址也有水印。 上传图片使用uni-app的uni.chooseImage&#xff08;&#xff09;方法&#xff0c;水印是用canvas。 以下代码可以直接使用…

vue或js解析文件excel表格js通过插件解析表格读取文件

安装插件 cnpm i xlsx --save-dev cnpm i jquery --save-dev 引入插件 html引入文件 <input type"file" id"excel-file" value"file"/> dom加载完成解析文件 mounted() {$(#excel-file).change(function(e) {var files e.target.fi…

微信小程序request请求封装;微信小程序封装request请求;uni-app小程序封装request请求;

本片封装了微信小程序request请求&#xff1b;为别是post get put请求&#xff0c;重点在request.js文件 1.新增四个文件 2.根目录下的utils下的request.js封装uni.request()请求 2.1 manifest.json&#xff1a;解决H5浏览器跨域问题-----配置代理一定要重启项目 // 自定义配…