2010-08-12 27 views
0

我正在创建一个windows服务,它必须在特定的日期和时间运行。我使用XML文档传递这些变量。这里是我的代码在Service1.cs将参数传递给c中的windows服务#

protected override void OnStart(string[] args) 
    { 
    timer1.Enable = true; 
    } 

    private void timer1_Tick(object sender, EventArgs e) 
    { 
     foreach (string DayToRun in daysToExecute) 
     { 
      if (DateTime.Now.DayOfWeek.ToString().ToUpper().Equals(DayToRun.ToUpper()) && DateTime.Now.ToShortTimeString().Equals(timeToExecute)) 
      { 
       Process.Start("Path to executable"); 
      } 
     } 
    } 

传递值

static void Main() 
    { 
     ServiceBase[] ServicesToRun; 

     Service1= new Service1();   

     //Load setting from xml and assign to variables "daysToExec" and "timeToExec" 
     LoadSettings(); 
     Service1.daysToExecute = daysToExec; 
     Service1.timeToExecute = timeToExec; 
     ServicesToRun = new ServiceBase[] { Service1 }; 
     ServiceBase.Run(ServicesToRun);   

    } 

的的OnStart代码(),但这没有启动可执行文件。这段代码有什么问题吗?

谢谢。

+0

只要问这里显而易见的问题...在daysToExecute中有没有字符串,当它打到Timer1_Tick调用? 此外,你确定timeToExec是匹配你的格式? – taylonr 2010-08-12 17:27:13

+0

是的。 daysToExec是字符串列表。我不知道它是否有任何价值。如果你能告诉我怎么看这个,那将会很有帮助。 感谢您的回复。 – shanthiram 2010-08-12 17:35:16

+1

你应该至少用一些日志功能来写出一个文本文件。然后,您可以写出有关您的参数的信息。 (有些方法可以调试服务,但写入文本文件对于这种情况可能最简单) – 2010-08-12 18:24:20

回答

0

我得到了答案。我使用的是System.Windows.Forms.Timer,由于某种原因,它根本不执行timer_tick方法。使用System.Timers.Timer后,它工作正常。

感谢您的意见。

+0

Windows窗体计时器建立在窗口消息上,因此您需要一个消息泵(由Application.Run创建)才能工作。这通常是您在服务应用程序中不具备的。 顺便说一句,你是重新发明Windows任务计划? – 2010-08-13 13:36:54

+0

是的,我想。这就是要求。不喜欢它,但必须这样做。 – shanthiram 2010-08-13 16:31:06