如何在Windows服务中运行长时间运行的进程?

时间:2010-10-08 14:45:04

标签: c# windows-services

有人可以让我知道如何从Windows服务(在C#中)运行一个长时间运行的进程吗?这个过程可能需要数小时才能完成。服务应检查数据库中是否有要执行的待处理作业。每项工作都需要很长时间才能完成。如果没有待处理的作业,那么它应该睡2分钟(可配置)然后重新开始。我怎么能用Windows服务呢?提前谢谢。

4 个答案:

答案 0 :(得分:3)

你必须创建像这样的控制台应用程序

    static void Main(string[] args)

    {
       bool createdNew;
        Mutex m = new Mutex(true, "YourBatchProcessor", out createdNew);
        if (!createdNew)
        {
             Console.WriteLine("YourBatchProcesso is already running!");
            return;
        }
        //your code goes here

    }

并且正如Gmoliv所说创建计划任务而不是每2分钟运行一次

或者如果您想编写窗口服务,那么您的服务代码就像

   public class YourServrClass
   {

    private int numticks = 0;
    private Timer _timer;
    private bool _IsStarted;
    private int Interval =2000; //ticks //2 sec.
    #region Initializer
     public YourServrClass()
    {
        InitializeComponent();
        _timer = new Timer();
         _timer.Interval = Interval;
        _timer.Elapsed += new ElapsedEventHandler(this.Timer_Tick);
    }
    #endregion

    #region Timer_Tick to process

    private void Timer_Tick(object sender, System.Timers.ElapsedEventArgs e)
    {
        numticks++;
        if (_IsStarted)
        {
            _timer.Stop();

            //your code //ProcessYourData();
            _timer.Start();
        }
    }
    #endregion
    protected override void OnStart(string[] args) 
    { 
           _IsStarted=true;
    } 

    protected override void OnStop() 
    { 
          _IsStarted=false;
    } 

 }

答案 1 :(得分:1)

  1. 创建一个新的“Windows服务”项目。
  2. 覆盖OnStart方法以创建任一线程。该线程将处理轮询和处理。
  3. 重写OnStop方法以设置标志。步骤2中的线程会监视此标志并相应地终止自身。
  4. 打开Service类的设计图面。 “属性”窗口底部是一个名为“添加安装程序”的链接。点击它。
  5. 使用InstallUtil安装suervice或将其放入安装程序包中。
  6. 我一直在写服务,所以请随时问我后续问题。

答案 2 :(得分:0)

没有特别的技巧,除了你不能使用任何GUI / Forms或用户输入。根据定义,Windows服务没有用户I / O.将错误写入事件日志,你没事。

答案 3 :(得分:0)

使用Windows计划任务要比开发自己的应用程序容易得多,你应该试一试。

如果它没有按你期望的方式工作,正如杰伊所说,没有诀窍,只记得没有GUI。