当前位置:   article > 正文

c#创建windows服务执行定时任务(vs2010)_c# windows服务 指定时间执行任务

c# windows服务 指定时间执行任务

可以在原有项目中新建项目
选中Visual c#-》Windows->Windows 服务-》确定
具体操作见使用c#创建Windows服务,将第二部分操作完成即可。
右击service类查看代码,添加你需要的服务代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.IO;
using CarpaServer.Vch;
using Carpa.Web.Script;
using CarpaServer;
using CarpaServer.Service;
using System.Configuration;

namespace MyWindowsService
{
    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }
        public static bool timerIsRuning = false;
        string filePath = @"D:\MyServiceLog\";
        BillIndexAuditCxService dbcs = new BillIndexAuditCxService();

        /// <summary>
        /// 启动
        /// </summary>
        /// <param name="args"></param>
        /// 如果要调试服务程序,将OnStart方法设置成public的无参方法即可
        //public void OnStart()
        protected override void OnStart(string[] args)
        {
            string timeStr = DateTime.Now.ToString("yyyy-MM-dd");
            filePath += "MyServiceLog" + timeStr + ".txt";
            using (FileStream stream = new FileStream(filePath,FileMode.Append))
            using (StreamWriter writer = new StreamWriter(stream))
            {
                writer.WriteLine("---------------------" + DateTime.Now + ",服务启动!" + "---------------------");
            }
            System.Timers.Timer timer = new System.Timers.Timer(10000*6*30);//创建定时器10s执行一次 10s*6*30=30min执行一次
            timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
            timer.AutoReset = true;//设置是一次执行还是一直执行
            timer.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件
        }

        public void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            if (timerIsRuning) return;
            timerIsRuning = true;
            using (FileStream stream = new FileStream(filePath, FileMode.Append))
            using (StreamWriter writer = new StreamWriter(stream))
            {
                try
                {
                    var list = dbcs.PullBill();//这里是调用的我写好的操作方法,改成自己需要的代码即可
                    string txt = DateTime.Now + ",更新结果:" + list;
                    writer.WriteLine(txt);
                }
                catch (Exception ex)
                {
                    writer.WriteLine("-------" + DateTime.Now + ":获取单据失败," + ex.StackTrace + "-------");
                    throw;
                }
                timerIsRuning = false;
            }
        }

        protected override void OnStop()
        {
            using (FileStream stream = new FileStream(filePath, FileMode.Append))
            using (StreamWriter writer = new StreamWriter(stream))
            {
                writer.WriteLine("---------------------" + DateTime.Now + ",服务停止!" + "---------------------");
            }
        }
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81

若需要调试,除了将上述注释代码复原外,还需要修改program类,注释掉原有代码,打开调试用代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceProcess;
using System.Text;

namespace MyWindowsService
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        static void Main()
        {
            ServiceBase[] ServicesToRun;
            ServicesToRun = new ServiceBase[] 
            { 
                new Service1() 
            };
            ServiceBase.Run(ServicesToRun);

            //调试用代码
            //Service1 s1 = new Service1();
            //s1.OnStart();

        }
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

写完代码后需要在计算机上创建服务
1、WIN+R打开运行输入cmd
2.、输入 sc create ServerName binpath= “E:\code\bin\MyWindowsService.exe” 等号后有空格,其中E:\code\bin\MyWindowsService.exe为你的服务生成dll的地址

sc create ServerName binpath= "E:\code\bin\MyWindowsService.exe" 
  • 1
  1. 启动服务 sc start ServerName
  2. WIN + R 打开运行窗口,输入services.msc ,可以看到你刚新建的服务【ServerName】,右键选择属性改成自动
  3. 删除服务 sc delete ServerName 其实删除后就是禁用

每次修改代码后,需要先停用服务,重新生成代码,再打开服务。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/436666
推荐阅读
相关标签
  

闽ICP备14008679号