以下の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でスケジュールされた日時と比較し、スケジュールされた日時に従ってアプリケーションを実行する必要があります。このための実装ヘルプを提供してください。
また、スケジュールされた日時に達したときにのみサービスが実行されるようにする必要があります(スケジュールされた時間に達するまでサービスはアイドル状態である必要があります)