windows服务加定时器实现
首先在项目中添加windows服务


然后双击“MainService.cs”,在上面点右键“打开代码”

以下是我的实例代码
partial class MainService : ServiceBase
{
int iHour = Convert.ToInt32(System.Configuration.ConfigurationSettings.AppSettings["HH"]);//开始时间小时
int iMinute = Convert.ToInt32(System.Configuration.ConfigurationSettings.AppSettings["MM"]);//开始分钟
int iSecond = Convert.ToInt32(System.Configuration.ConfigurationSettings.AppSettings["SS"]);//开始秒钟 public MainService()
{
InitializeComponent();
} /// <summary>
/// 服务开启
/// </summary>
protected override void OnStart(string[] args)
{
System.Timers.Timer timer1 = neew System.Timers.Timer();
timer1.Inteval = 1000;//1000毫秒即1秒
timer1.Elapsed += new System.Timers.ElapsedEventHandler(timer1_Elapsed);//达到任务时间时的执行事件
timer1.AutoReset = true;//true为一直执行
timer1.Enabled = true;
WriteLog("MainService服务启动-------------->",true);
} private void timer1_Elapsed(object sender,System.Timers.ElapsedEventArgs e)
{
int inHour = e.SignalTime.Hour;
int inMinute = e.SignalTime.Minute;
int inSecond = e.SignalTime.Second;
if(inHour == iHour && inMinute == iMinute && inSecond == iSecond)
{//定时器时间到达我们规定的时间
WriteLog("定时任务执行开始",true);
try
{
//执行内容,你需要执行的代码
}
catch(Exception ex)
{
WriteLog("定时任务执行失败!",true);
WriteLog("失败原因:" + ex.Message,false);
}
WriteLog("定时任务执行结束!",true);
}
}
/// <summary>
/// 服务关闭
/// </summary>
protected override void OnStop()
{
WriteLog("MainService服务关闭----------->",true);
} /// <summary>
/// 日志输出
/// </summary>
prevate void WriteLog(string content,bool isAddTime)
{
string txtPath = System.Configuration.ConfigurationSettings.AppSettings["LogPath"].ToString();//日志路径
string txtFile = DateTime.Now.ToString("yyyyMMdd") + ".txt";
if(!Directory.Exists(txtPath))
Directory.CreateDirectory(txtPath);
if(isAddTime)
File.AppendAllText(txtPath + txtFile,DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":" + content + "\r\n");
else
File.AppendAllText(txtPath + txtFile,content + "\r\n");
}
}

项目中添加了ProjectInstaller.cs文件,该文件中视图自动会添加俩个组件
serviceProcessInstaller1
serviceInstaller1
可以看见项目中多了如下文件和组件,serviceProcessInstaller1、serviceInstaller1是自动生成的
设置组件serviceInstaller1的主要属性,ServiceName: 服务系统标识,在cmd命令中执行sr start/stop/query等等命令时候使用,用来唯一标识一个Window服务,这个千万要注意,别弄混了!
设置ServiceName的值, 该值表示在系统服务中的名称
设置StartType, 如果为Manual则手动启动,默认停止,如果为Automatic为自动启动
设置Description,添加服务描述
设置组件serviceProcessInstaller1的主要属性,Accout:账户类型,LocalSystem本地系统服务;
然后重新生成项目,生成成功!
/********************************************************************************************以下为安装*****************************************************************************************/
首先以管理员身份运行cmd(必须,否则会不成功),注,以下的v4.0.30319对应你项目使用的framework版本,若用的2.0版本则替换为v.2.0.50727
输入: cd C:\Windows\Microsoft.NET\Framework\v4.0.30319 InstallUtil.exe 你的生成的windows服务exe路径(bin/debug中)
卸载 输入 cd C:\Windows\Microsoft.NET\Framework\v4.0.30319 InstallUtil.exe -u 你的生成的windows服务exe路径(bin/debug中)
/*************************************************************************************************************************************************************************************************/
因嫌以上的安装卸载太麻烦,我将安装卸载卸载了bat批处理文件中,如下
在windows服务类库中添加install.txt文件和uninstall.txt改名为install.bat和uninstall.bat,注意编码格式不要用utf-8,使用ANSI
在install.bat文件中写入以下代码
@echo off
set filename = "%~dp0你的windows服务名称.exe"
set servicename = 定义的服务名称
set Frameworkdc = %SystemRoot%\Microsoft.NET\Framework\v4.0.30319
if exist "%Frameworkdc%" goto netOld
:DispError
echo 您的机器上没有安装 .net Framework 4.0,安装即将终止
echo 您的机器上没有安装 .net Framework 4.0,安装即将终止 > InstallService.log
goto LastEnd
:netOld
cd %Frameworkdc%
echo 您的机器上安装了相应的.net Framework 4.0,可以安装本服务.
echo 您的机器上安装了相应的.net Framework 4.0,可以安装本服务 > InstallService.log
echo.
echo. >> InstallService.log
echo **************************
echo 安装服务 %filename%
%Frameworkdc%\InstallUtil.exe %filename% >> InstallService.log
echo 启动服务
net start %servicename% >> InstallService.log
echo **************************
echo 操作结束,可以查看日志文件InstallService.log中具体的操作结果。
:LastEnd
pause
rem exit
我的写法是这样的:
@echo off 
set filename="%~dp0服务类库名.exe"
set servicename=你的服务名称
set Frameworkdc=%SystemRoot%\Microsoft.NET\Framework\v4.0.30319
if exist "%Frameworkdc%" goto netOld 
:DispError 
echo 您的机器上没有安装 .net Framework 4.0,安装即将终止.
echo 您的机器上没有安装 .net Framework 4.0,安装即将终止  >InstallService.log
goto LastEnd 
:netOld 
cd %Frameworkdc%
echo 您的机器上安装了相应的.net Framework 4.0,可以安装本服务. 
echo 您的机器上安装了相应的.net Framework 4.0,可以安装本服务 >InstallService.log
echo.
echo. >>InstallService.log
echo *********************
echo 安装服务 %filename%
%Frameworkdc%\InstallUtil.exe %filename% >>InstallService.log
echo 启动服务
net start %servicename% >>InstallService.log
echo *********************
echo 操作结束,可以查看日志文件InstallService.log 中具体的操作结果。
:LastEnd 
pause
rem exit
在uninstall.bat中写入以下代码
@echo off
set filename = "%~dp0生成ext名称.exe"
set servicename = 自定义的服务名称
set Frameworkdc = %SystemRoot%\Microsoft.NET\Framework\v4.0.30319
if exist "%Frameworkdc%" goto netOld
:DispError
echo 您的机器上没有安装 .net Framework 4.0,安装即将终止
echo 您的机器上没有安装 .net Framework 4.0,安装即将终止 > UnInstallService.log
goto LastEnd
:netOld
cd %Frameworkdc%
echo 您的机器上安装了相应的.net Framework 4.0,可以安装本服务
echo 您的机器上安装了相应的.net Framework 4.0,可以安装本服务 > UnInstallService.log
echo.
echo. >> UnInstallService.log
echo **************************
echo 停止服务
net stop %servicename% >> UnInstallService.log
echo 清理服务
%Frameworkdc%\Installutil.exe /u %filename% >> UnInstallService.log
echo 清理完毕
echo.
echo***************************
echo 操作结束,可以查看日志文件UnInstallService.log中具体的操作结果。
:LastEnd
pause
rem exit
我项目中的写法:
@echo off 
set filename="%~dp0服务类库名称.exe"
set servicename=服务名称
set Frameworkdc=%SystemRoot%\Microsoft.NET\Framework\v4.0.30319
if exist "%Frameworkdc%" goto netOld 
:DispError 
echo 您的机器上没有安装 .net Framework 4.0,安装即将终止.
echo 您的机器上没有安装 .net Framework 4.0,安装即将终止  >UnInstallService.log
goto LastEnd 
:netOld 
cd %Frameworkdc%
echo 您的机器上安装了相应的.net Framework 4.0,可以安装本服务. 
echo 您的机器上安装了相应的.net Framework 4.0,可以安装本服务 >UnInstallService.log
echo.
echo. >>UnInstallService.log
echo *********************
echo 停止服务
net stop %servicename% >>UnInstallService.log
echo 清理服务
%Frameworkdc%\installutil.exe /u %filename% >>UnInstallService.log
echo 清理完毕
echo.
echo *********************
echo 操作结束,可以查看日志文件UnInstallService.log 中具体的操作结果。
:LastEnd 
pause
rem exit
以上写法,win7与win8都没有问题,但是在win10中出现了安装成功,启动失败的情况,(.netframework版本原因)
附上简单的install.bar中
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe %~dp0文件名.exe
Net Start 服务名
Pause
uninstall.bat中
Net Stop 服务名
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u %~dp0文件名.exe
Pause
windows服务加定时器实现的更多相关文章
- C#创建windows服务搭配定时器Timer使用实例(用代码做,截图版)
		
功能说明:C#创建一个windows服务,服务启动时D:\mcWindowsService.txt写入数据,服务运行期间每隔两秒写入当前时间. 原理这些就不说了,三语两语说不清楚,直接贴一个实例 ...
 - 不用写Windows服务实现定时器功能(FluentScheduler )
		
MacBook Pro 只有四个 USB Type-C 接口是否错了? 一项新技术的诞生总会对已存在的事物造成冲击或影响,如果大家都害怕冲击与影响,那这个世界永远像现在不变就行了,大家都好好的,待在自 ...
 - 解决windows 服务中定时器timer 定时偶尔失效 问题
		
最近做个windows 服务,功能是:定时执行一个任务:自动登录到一个网站后,点击相关网面上的按钮button. 在处理的过程中发现定时器老是不定时的失效,失效时间没有规律. 由于刚开始处于测试阶段, ...
 - ASP.NET MVC 中应用Windows服务以及Webservice服务开发分布式定时器
		
ASP.NET MVC 中应用Windows服务以及Webservice服务开发分布式定时器一:闲谈一下:1.现在任务跟踪管理系统已经开发快要结束了,抽一点时间来写一下,想一想自己就有成就感啊!! ...
 - c# 在windows服务中 使用定时器
		
由于最近做自动执行的程序,开始做windows服务程序, 在windows服务中如何使用定时器的时候一直失效, 以前是直接拖入timer控件,但是不能直接运行,后来在网上找了一段程序,好使了. //开 ...
 - 在windows服务中使用定时器
		
在windows服务中,利用winform中直接拖动timer控件的方式使用定时器是不可以的,启动服务后会发现定时器并没有执行.那么在windows服务中如何使用定时器呢? 不使用直接拖动控件的方式 ...
 - 在Windows服务中添加定时器
		
创建windows服务: 在VisualStudio中用C#创建一个Windows服务,微软MSDN参考地址: http://msdn.microsoft.com/zh-cn/library/zt39 ...
 - 安装MongoDB(做成Windows服务)并加载C#驱动程序
		
一 Mongodb简介: 通过查询网上的一些信息来介绍一下Mongodb的优势:MongoDB是一个面向文档的数据库,目前由10gen开发并维护,它的功能丰富,齐全,完全可以替代MySQL.在使用Mo ...
 - Windows服务的安装及配合定时器编写简单的程序
		
最近要实时统计一些数据,所以就用到了Windows服务及定时任务,在这里记录下. Windows Service简介: 一个Windows服务程序是在Windows操作系统下能完成特定功能的可执行的应 ...
 
随机推荐
- Python_tkinter(2)_常用控件
			
1.Label--标签(文字/位图)控件 from tkinter import * root = Tk() root.geometry('200x200') # Label控件 字体.边框.背景 l ...
 - Redis的持久化之RDB方式
			
RDB方式 Redis是默认支持的 优势:只有一个文件,时间间隔的数据,可以归档为一个文件,方便压缩转移(就一个文件) 劣势:如果宕机,数据损失比较大,因为它是没一个时间段进行持久化操作的.也就是积攒 ...
 - .Net开发常用工具插件
			
多功能工具 Notepad++/Sublime Text 3/VS code Web请求工具 Postman .Net开发工具 Microsoft Visual Studio以及代码规范审查插件Sty ...
 - Nginx实现负载均衡的简单案例
			
七层负载均衡的实现(Nginx): 基于URL等应用层信息的负载均衡,一般使用Nginx来实现 Nginx的proxy是它一个很强大的功能,实现了7层负载均衡 功能强大.性能卓越.运行稳定 配置简单灵 ...
 - 对象是存入cookie中需要注意
			
直接把对象存入cookie中的话,会转为字符串的 cookie中保存的都是字符串 所以取出来后还需要进行转换,转换成对象 JSON.parse()进行转换
 - Spring增强代理模式
			
1. 依赖注入;(掌握) 2. XML自动注入;(掌握) 3. 全注解配置;(掌握) 4. 代理模式;(掌握,难点) 依赖注入 构造参数注入 constructor-arg:构造器注入: index: ...
 - 《linux就该这么学》第十三节课:第11章和第12章,vsftpd服务与samba和nfs服务
			
第十一章 (借鉴请改动) 11.1.文件传输协议 FTP文件穿数协议,端口20用于数据传输,21端口用于传输相关FTP命令 ftp协议的两种工作模式: 主动模式:ftp向客户端发起 被动模式(默认): ...
 - xlua build时 报错处理
			
error trpe 'UnityEngine.Lighr' does not contain a definiton for 'sgadowRadius' and no extension meth ...
 - parcel 在js中导入 html 文件
			
parcel不支持将html文件导入为字符串,如果您对parcel使用熟练,直接使用 parcel-plugin-phtml 插件即可,此插件使用 .phtml 后缀 为什么用parcel? 因为从我 ...
 - python模块之configparse模块
			
# -*- coding:utf-8 -*- import configparser # configparser 模块 # 1.创建一个创建对象 # 2.创建键值对的配置项目 字典的形式进行创建 # ...