【问题标题】:Restart a windows service at specific time在特定时间重新启动 Windows 服务
【发布时间】:2013-07-23 05:51:18
【问题描述】:

我创建了一个服务,它在后台的某个时间执行一个 exe。我想设置一个计时器,使服务每天同时执行 exe.. 怎么做..???这是我在服务类中编写的代码:

public partial class Service1 : ServiceBase
{
    string time = DateTime.Now.ToShortTimeString();
    Process p = new Process();

    public Service1()
    {
        InitializeComponent();
    }

    protected override void OnStart(string[] args)
    {
        BackgroundWorker bw = new BackgroundWorker();
        bw.DoWork += new DoWorkEventHandler(DoWork);
        bw.RunWorkerAsync();
    }

    private void DoWork(object sender, DoWorkEventArgs e)
    {
        p.StartInfo = new ProcessStartInfo(@"c:\windows\ccm\ccmeval.exe");

        if (time == "6:55 PM")
        {
            p.Start();
            p.WaitForExit();
            base.Stop();
        }
    }

    protected override void OnStop()  { }

【问题讨论】:

  • 您为什么不使用 Windows 任务计划程序,而不是使用...计划...任务的服务?

标签: c# timer windows-services


【解决方案1】:

假设您想在每天早上 6:30 运行每个任务

        var dtTimeToStartAt = DateTime.Today.AddHours(6).AddMinutes(30);
        dtTimeToStartAt = DateTime.Now > dtTimeToStartAt ? dtTimeToStartAt.AddDays(1) : dtTimeToStartAt;

        var timer = new System.Threading.Timer(x => YourCallbackMethod(), new object() /*not much use*/,
                                           dtTimeToStartAt.Subtract(DateTime.Now), new TimeSpan(24, 0, 0));

【讨论】:

  • 虽然一个版本可能会起作用,但它仍然像用螺丝刀钉钉子一样。为工作使用正确的工具,在这种情况下是 Windows 任务计划程序(OP 没有进一步解释为什么它不适合)。
  • 我不想使用任务调度程序。我希望代码能够在特定时间重新启动服务。
  • 您想从父进程触发子线程,该子线程必须一直运行(这是一项成功的工作)。最好的是@J.Steen 的建议。
猜你喜欢
  • 1970-01-01
  • 2012-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-21
相关资源
最近更新 更多