2013-07-23 2 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시 반 일상

 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 작업 스케줄러 인 작업에 적합한 도구를 사용하십시오 (이유가 적절하지 않은 이유에 대한 추가 설명없이). –

+0

나는 작업 스케줄러를 사용하고 싶지 않다. 나는 특정 시간에 서비스를 재시작하는 방식으로 코드를 원한다. – Khushi

+0

부모 프로세스에서 자식 스레드를 트리거하려고합니다. 부모 스레드 프로세스는 항상 실행해야합니다. J.Steen이 권고 한 것이 가장 좋습니다. – sandeep

관련 문제