当前位置:首页 > Windows程序 > 正文

在VS2012中新建WindowsService定时任务

2021-05-24 Windows程序

1.0 打开VS2013,选择文件->新建->项目。在项目中找到windows服务项目,重新命名后点击确定。

技术分享

2、在service1设计器中点击右键,选择查看代码,进入代码页面。

2.1 设置App.config(数据库连接字符串和参数)

<?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1" /> </startup> <connectionStrings> <add connectionString="data source=172.16.251.34;initial catalog=yccenter;user id=ycliulei30963;password=ycliulei30963_1123V223s9;Integrated Security=False" providerName="System.Data.SqlClient"/> <add connectionString="User ID=IPS;Password=IPS20150309;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.251.32)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = TEST0321)))" providerName="System.Data.OracleClient" /> </connectionStrings> <appSettings> <add key="logFilePath" value="D:\ycSynchroDatalog\" /> </appSettings> </configuration>

2.2 从appconfig中获取sql server数据库和oracle数据库的连接字符串,以及配置的一些参数。并设置Timer控件

//Sql server连接字符串 private static string strSqlConnection = System.Configuration.ConfigurationManager.ConnectionStrings["SqlConnString"].ConnectionString; //Oracle连接字符串 private static string strOracleConnection = System.Configuration.ConfigurationManager.ConnectionStrings["OracleConnString"].ToString(); //日志文件路径 private static string logFilePath = System.Configuration.ConfigurationManager.AppSettings["logFilePath"].ToString() + DateTime.Now.ToString("yyyyMMdd") + @"\logSynchroData.txt"; //八点开启的服务Timer控件 System.Timers.Timer SoSoftTimer = new System.Timers.Timer(1000); //十点开启的服务Timer控件 System.Timers.Timer startTenTimer = new System.Timers.Timer(1000);

2.3 在代码编辑器中添加【OnStart】服务启动方法。

protected override void OnStart(string[] args) { // TODO: 在此处添加代码以启动服务。 SoSoftTimer.Elapsed += SoSoftTimer_Elapsed; SoSoftTimer.Start();//开始计时器 SoSoftTimer.Enabled = true; startTenTimer.Elapsed += startTenTimer_Elapsed; startTenTimer.Start(); startTenTimer.Enabled = true; }

2.4 添加【OnStop】服务结束方法

protected override void OnStop() { startTenTimer.Enabled = false; SoSoftTimer.Enabled = false; }

2.5

除此之外还有一个Program.cs文件:打开看下。

使得一个Windows服务程序能够正常运行,我们需要像创建一般应用程序那样为它创建一个程序的入口点。在Windows服务程序中,我们也是在Main()函数中完成这个操作的。首先我们在Main()函数中创建一个Windows服务的实例,该实例应该是ServiceBase类的某个子类的对象,然后我们调用由基类ServiceBase类定义的一个Run()方法。然而Run()方法并不就开始了Windows服务程序,我们必须通过前面提到的服务控制管理器调用特定的控制功能来完成Windows服务程序的启动,也就是要等到该对象的OnStart()方法被调用时服务才真正开始运行。如果你想在一个Windows服务程序中同时启动多个服务,那么只要在Main()函数中定义多个ServiceBae类的子类的实例对象就可以了,方法就是创建一个ServiceBase类的数组对象,使得其中的每个对象对应于某个我们已预先定义好的服务。

/// <summary> /// 应用程序的主入口点。 /// </summary> static void Main() { ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { new ServiceData(), new Service2() }; ServiceBase.Run(ServicesToRun); }

2.6  添加八点的时候运行的方法StartEightTimer_Elapsed

void StartEightTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { int intHour = e.SignalTime.Hour; int intMinute = e.SignalTime.Minute; int intSecond = e.SignalTime.Second; //判断是否同步数据(八点) if (intHour == 8 && intMinute ==00 && intSecond ==00) { WriteTxtFile(DateTime.Now.ToLongTimeString() + " : 八点的服务开始同步数据!", logFilePath); CallSqlToOracle("八点的"); WriteTxtFile(DateTime.Now.ToLongTimeString() + " : 八点的服务同步数据结束!\r\n", logFilePath); } }

2.7 添加十点的时候运行的方法startTenTimer_Elapsed

void startTenTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { int intHour = e.SignalTime.Hour; int intMinute = e.SignalTime.Minute; int intSecond = e.SignalTime.Second; //判断是否同步数据(十点) if (intHour ==10 && intMinute == 00 && intSecond == 00) { WriteTxtFile(DateTime.Now.ToLongTimeString() + " : 十点的服务开始同步数据!", logFilePath); CallSqlToOracle("十点的"); WriteTxtFile(DateTime.Now.ToLongTimeString() + " : 十点的服务同步数据结束!\r\n", logFilePath); } }

2.8 添加同步数据的方法CallSqlToOracle

 

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/70518.html