2013-07-23 92 views
-1

我已經創建了一個服務,它在特定時間在後臺執行exe。我想設置一個計時器,以便服務可以在同一時間每天執行這個exe文件..怎麼可以這樣做?下面是代碼,我寫在我的服務類:在特定時間重新啓動Windows服務

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() { } 
+2

你爲什麼不使用Windows任務計劃程序,而不是運行每個任務服務......時間表......任務? –

回答

0

假設你想在6:30 AM日常

 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)); 
+1

雖然這個版本可能會起作用,但它仍然像使用螺絲刀驅動釘子。在這種情況下使用正確的工具是Windows任務計劃程序(沒有任何OP的進一步解釋,爲什麼它不合適)。 –

+0

我不想使用任務調度程序。我希望代碼能夠在特定時間重新啓動服務。 – Khushi

+0

你想從父進程觸發一個子進程,它必須一直運行(它是一個獲勝作業)。最好的是@ J.Steen建議的。 – sandeep