2013-03-05 53 views
0

我有下面的xml使用我讀取計劃的日期和時間在計劃的時間運行應用程序。使用Windows服務和XML的計劃任務

<AvSchedule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Days> 
    <Day Name="Monday">true</Day> 
    <Day Name="Tuesday">false</Day> 
    <Day Name="Wednesday">false</Day> 
    <Day Name="Thursday">false</Day> 
    <Day Name="Friday">false</Day> 
    <Day Name="Saturday">false</Day> 
    <Day Name="Sunday">false</Day> 
    </Days> 
    <Time Hour="12" Minutes="15" /> 
</AvSchedule> 

下面是我寫反序列化的XML代碼:

AvSchedule avSchedule = null; 


private void Deserialize() 
{    
    FileStream fs = File.OpenRead(@"C:\Scheduler.xml"); 
    XmlSerializer serializer = new XmlSerializer(typeof(AvSchedule)); 
    Object obj = serializer.Deserialize(fs); 
    if((obj != null) && (obj is AvSchedule)) 
    { 
     avSchedule = obj as AvSchedule; 
    }   
} 

下面是我的實現上運行的服務啓動應用程序。

protected override void OnStart(string[] args) 
{ 
    //System.Diagnostics.Debugger.Launch(); 
    base.OnStart(args); 
    Deserialize(); 
    Thread thr = new Thread(new ThreadStart(ScheduleThread)); 
    thr.Start();  
} 



public void ScheduleThread() 
{     
     //Process logic should go here 
     try 
     { 
      System.Diagnostics.ProcessStartInfo processStartInfo = new System.Diagnostics.ProcessStartInfo(); 
      processStartInfo.Arguments = "/Task {21211-A06D-4558-B833-98E8C7F62}"; 
      processStartInfo.FileName = "C:\\Program Files (x86)\\Logic\application.exe"; 
      System.Diagnostics.Process process = new System.Diagnostics.Process(); 
      process.StartInfo = processStartInfo; 
      process.Start(); 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine("Unable to run", e.Message); 
     } 

    } 
} 

///Sleep for 1 minute 
Thread.Sleep(TimeSpan.FromMinutes(1)); 
} 

} 

現在我想在達到預定時間時運行上述應用程序。我需要將當前時間和日期與xml中的計劃時間和日期進行比較,並按照計劃的時間和日期運行應用程序。請爲此提供實施幫助。

我也需要確保服務達到預定時間,每天只運行時(服務應該是空閒狀態,直至達到預定時間)

回答

1

我知道我不會回答你的問題,但直接。 ..不要重新發明輪子!

使用Quartz.net

Quartz.NET是一個全功能的,開源的作業調度系統,它可以從最小的應用程序可用於大型企業系統。

它非常強大和可靠,你可以做任何類型的調度。

它處理的是非常不同的線程,而不是像你在做的那樣運行進程。

它有xml配置,它是full features

我已經在很多項目中使用過它,它工作得很好。

---更新後評論---------

使用低於Timer

代碼只不過是你能適應你的需求爲例

public class ScheduleThread 
{ 
    private readonly TimeSpan _timeSpan; 
    private readonly Timer _timer; 
    public bool IsRunning { get; protected set; } 
    public ScheduleThread() 
    { 
     IsRunning = false; 
        //set the timespan according your config    
     _timeSpan = new TimeSpan(); 
    } 
    public void Start() 
    { 
     if (IsRunning == false) 
     { 
      IsRunning = true; 
      StartTimer(); 
     } 
    } 
    private void StartTimer() 
    { 
        _timer = new Timer(CallBack); 
     _timer.Change(_timeSpan, TimeSpan.Zero); 
    } 
    public void Stop() 
    { 
     if (IsRunning) 
     { 
      _timer.Dispose(); 
      IsRunning = false; 
     } 
    } 
    private void CallBack(object obj) 
    { 
     //if process is not running 
     //start process 
    }  
} 
+0

你可以請提供其他解決方案?我無法在我的應用程序中使用第三方應用程序。 – user004 2013-03-05 12:08:07

+0

@ user004你試過我的例子嗎? – giammin 2013-03-05 15:21:09

+0

這就是我正在尋找..感謝很多giammin – user004 2013-03-06 03:50:10