C# 创建系统服务并定时执行

1.新建项目 --》 Windows 服务
2.Service1.cs代码

 view plaincopy to clipboardprint?
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("我的服务停止");  
        }  
    }  

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

 

posted on 2011-01-07 16:01  努力实现目标  阅读(21379)  评论(0编辑  收藏  举报