C#创建windows服务并定时执行
一、创建window服务
1、新建项目-->选择Windows服务。默认生成文件包括Program.cs,Service1.cs
2、在Service1.cs添加如下代码:
System.Timers.Timer timer1; //计时器
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args) //服务启动执行
{
timer1 = new System.Timers.Timer();
timer1.Interval = 3000; //设置计时器事件间隔执行时间
timer1.Elapsed += new System.Timers.ElapsedEventHandler(timer1_Elapsed);
timer1.Enabled = true;
}
protected override void OnStop() //服务停止执行
{
this.timer1.Enabled = false;
}
private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
//执行SQL语句或其他操作
}
二、添加window服务安装程序
1、打开Service1.cs【设计】页面,点击右键,选择【添加安装程序】,会出现serviceInstaller1和serviceProcessInstaller1两个组件
2、将serviceProcessInstaller1的Account属性设为【LocalSystem】, serviceInstaller1的StartType属性设为【Automatic】,ServiceName属性可设置服务名称,此后在【管理工 具】--》【服务】中即显示此名称
3、ProjectInstaller.cs文件,在安装服务后一般还需手动启动(即使上述StartType属性设为【Automatic】),可在ProjectInstaller.cs添加如下代码实现安装后自动启动
public ProjectInstaller()
{
InitializeComponent();
this.Committed += new InstallEventHandler(ProjectInstaller_Committed);
}
private void ProjectInstaller_Committed(object sender, InstallEventArgs e)
{
//参数为服务的名字
System.ServiceProcess.ServiceController controller = new System.ServiceProcess.ServiceController("服务名称");
controller.Start();
}
三、安装、卸载window服务
1、输入cmd(命令行),输入cd C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319,2.0为cd C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
2、安装服务(项目生成的exe文件路径)
InstallUtil "E:\WindowsService1\bin\Debug\WindowsService1.exe"
3、卸载服务
InstallUtil /u "E:\WindowsService1\bin\Debug\WindowsService1.exe"
四、查看window服务
控制面板-->管理工具-->服务,可在此手动启动,停止服务
五、调试window服务
1、通过【事件查看器】查看
2、直接在程序中调试(菜单-->调试-->附加进程-->服务名(这里的服务名是项目名称,不是ServiceName属性自定义的名称,所以建议自定义名称和项目名称保持一致,另外需勾选【显示所有用户的进程】才能看到服务名)-->附加
3. 在程序中打断点调试即可,另外调试服务时服务必须已启动(管理工具-->服务)
文字转自:http://blog.csdn.net/armyfai/article/details/8056976
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.IO;
using System.Text;
using System.Timers;
using System.Data.SqlClient;
using System.Threading;
namespace InnPoint
{
public partial class Service : ServiceBase
{
public Service()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
EventLog.WriteEntry("我的服务启动");//在系统事件查看器里的应用程序事件里来源的描述
writestr("服务启动");//自定义文本日志
System.Timers.Timer t = new System.Timers.Timer();
t.Interval = 1000;
t.Elapsed += new System.Timers.ElapsedEventHandler(ChkSrv);//到达时间的时候执行事件;
t.AutoReset = true;//设置是执行一次(false)还是一直执行(true);
t.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件;
}
/// <summary>
/// 定时检查,并执行方法
/// </summary>
/// <param name="source"></param>
/// <param name="e"></param>
public void ChkSrv(object source, System.Timers.ElapsedEventArgs e)
{
int intHour = e.SignalTime.Hour;
int intMinute = e.SignalTime.Minute;
int intSecond = e.SignalTime.Second;
if (intHour == 13 && intMinute == 30 && intSecond == 00) ///定时设置,判断分时秒
{
try
{
System.Timers.Timer tt = (System.Timers.Timer)source;
tt.Enabled = false;
SetInnPoint();
tt.Enabled = true;
}
catch (Exception err)
{
writestr(err.Message);
}
}
}
//我的方法
public void SetInnPoint()
{
try
{
writestr("服务运行");
//这里执行你的东西
Thread.Sleep(10000);
}
catch (Exception err)
{
writestr(err.Message);
}
}
///在指定时间过后执行指定的表达式
///
///事件之间经过的时间(以毫秒为单位)
///要执行的表达式
public static void SetTimeout(double interval, Action action)
{
System.Timers.Timer timer = new System.Timers.Timer(interval);
timer.Elapsed += delegate(object sender, System.Timers.ElapsedEventArgs e)
{
timer.Enabled = false;
action();
};
timer.Enabled = true;
}
public void writestr(string readme)
{
//debug==================================================
//StreamWriter dout = new StreamWriter(@"c:\" + System.DateTime.Now.ToString("yyyMMddHHmmss") + ".txt");
StreamWriter dout = new StreamWriter(@"c:\" + "WServ_InnPointLog.txt", true);
dout.Write("\r\n事件:" + readme + "\r\n操作时间:" + System.DateTime.Now.ToString("yyy-MM-dd HH:mm:ss"));
//debug==================================================
dout.Close();
}
protected override void OnStop()
{
writestr("服务停止");
EventLog.WriteEntry("我的服务停止");
}
}
}
3.在Service1.cs设计页面右键添加安装程序
4.ProjectInstaller.cs设计页面中
serviceInstaller1属性中设置:
Description(系统服务的描述)
DisplayName (系统服务中显示的名称)
ServiceName(系统事件查看器里的应用程序事件中来源名称)
serviceProcessInstaller1属性设置:Account 下拉设置成 LocalSystem
5.在.net Framework的安装目录可以找到InstallUtil.exe,可以复制出来放在你的服务生成的exe一起
6.安装服务setup.bat批处理文件内容:InstallUtil Service1.exe ,安装好后可以在系统服务中找到你设置的服务名称然后可以启动这个服务
7.卸载服务UnInstall.bat批处理文件内容:InstallUtil -u Service1.exe
C#创建windows服务并定时执行相关推荐
- 杂记2:VS2013创建Windows服务实现自动发送邮件
这篇随笔里,我将介绍如何用VS2013开发Windows服务项目,实现的功能是定时发送电子邮件. 开发环境:VS2013,SQL Server2008,采用C#语言开发 步骤一:创建Windows服务 ...
- 计划任务执行 php代码,php实现Windows任务计划定时执行的代码以及扩展(图)
任务计划在我们的日常工作开发中,有很大用处.有时项目需要大批量的数据更新插入数据库中,那么我们为了能够节约资源,需要定时时间段进行自动计算,为此,我们就需要php计划任务来实现,那么我们今天就给大家介 ...
- win服务器自动发邮件,asp.net基于windows服务实现定时发送邮件的方法
本文实例讲述了asp.net基于windows服务实现定时发送邮件的方法.分享给大家供大家参考,具体如下: //定义组件 private System.Timers.Timer time; publi ...
- 用.NET创建Windows服务
用.NET创建Windows服务 译者说明:我是通过翻译来学习C#的,文中涉及到的有Visual Studio.NET有关操作,我都根据中文版的VS.NET显示信息来处理的,可以让大家不致有误解. 作 ...
- 用C#创建Windows服务(Windows Services)
转载自 hyslove 最终编辑 hyslove Windows服务在Visual Studio 以前的版本中叫NT服务,在VS.net启用了新的名称.用Visual C# 创建Windows服务不是 ...
- (转)创建Windows服务(Windows Services)N种方式总结
转自:http://www.cnblogs.com/aierong/archive/2012/05/28/2521409.html 最近由于工作需要,写了一些windows服务程序,有一些经验,我现在 ...
- *用C#创建Windows服务(Windows Services)
Windows服务在Visual Studio 以前的版本中叫NT服务,在VS.net启用了新的名称.用Visual C# 创建Windows服务不是一件困难的事,本文就将指导你一步一步创建一个Win ...
- python windows服务_Python创建Windows服务
首先让我们开始安装Python for Windows扩展: c:test>pip install pywin32 完成后,让我们编写该基类,您的Windows服务将是该基类的子类. ''' S ...
- 演练:在组件设计器中创建 Windows 服务应用程序
http://msdn.microsoft.com/zh-cn/library/zt39148a(v=vs.80).aspx 演练:在组件设计器中创建 Windows 服务应用程序 .NET Fram ...
最新文章
- WSDM 2022 | 中科院、腾讯、北航提出:跨领域推荐中的个性化迁移用户兴趣偏好...
- 使用神经网络拟合曲线(MATLAB/Python)
- Qt工程文件Pro中判断Qt版本号
- IDEA远程调试服务器代码
- 添加第三方库到Maven资源库
- H264关于RTP协议的实现
- 学习笔记14-C语言-小项目-通讯录
- firefox应用自动全屏显示_【b】—自动化测试:基础selenium—API
- citra 图形设置_TinkerTool System 6 for Mac(系统深度设置维护工具)
- 互联网+商业 济宁苏宁生活广场打造智慧城市范本
- FreeSwitch Event Socket Command(事件套接字命令行)
- php是什么电器元件,第三代计算机采用的主要电子元器件是什么
- Fortran: namelist
- KL距离(衡量两个概率分布的差异情况)
- eplan图纸怎么发给别人_如何保护你的EPLAN图纸
- 设计模式-结构型软件设计模式(三)
- Python-Pandas基础
- 图像识别中的边框回归笔记,终于搞明白了啊!
- [第一篇] 桌面快捷方式小箭头的取消与恢复
- android ro.boot.mac,Android Verified Boot浅知分享