2012-05-21 2 views
0

У меня есть пользовательская служба Windows, и я хотел бы использовать Quartz .NET для планирования при запуске службы. Теперь я понимаю основы quartz.NET, но я не уверен, как я подключу его к службе Windows. Итак, скажем, у меня есть Service.exe, который я хочу запускать каждый час. Как реализовать эту функциональность с помощью Quartz? Я знаю, что это своего рода неопределенный вопрос, но нет другого способа спросить об этом.Планирование службы Windows с помощью кварца. NET

Заранее спасибо.

+0

Я бы использовал планировщик окон в этом сценарии, так как функциональность уже инкапсулирована внутри службы. –

+0

Это была моя первая мысль. Но, к сожалению, я не принимаю решения здесь: P –

ответ

3

Вам необходимо настроить работу и триггер. Задача вызывается триггером (http://quartznet.sourceforge.net/tutorial/lesson_3.html). Вот пример, который запускается каждый час.

// construct a scheduler factory 
ISchedulerFactory schedFact = new StdSchedulerFactory(); 

// get a scheduler 
IScheduler sched = schedFact.GetScheduler(); 
sched.Start(); 

// construct job info 
JobDetail jobDetail = new JobDetail("myJob", null, typeof(DumbJob)); 
// fire every hour 
Trigger trigger = TriggerUtils.MakeHourlyTrigger(); 
// start on the next even hour 
trigger.StartTime = TriggerUtils.GetEvenHourDate(DateTime.UtcNow); 
trigger.Name = "myTrigger"; 
sched.ScheduleJob(jobDetail, trigger); 

Это ваш класс, который вызывает Service.exe.

public class DumbJob : IJob 
{ 
    public void Execute(JobExecutionContext context) 
    { 
     string instName = context.JobDetail.Name; 
     string instGroup = context.JobDetail.Group; 

     // Note the difference from the previous example 
     JobDataMap dataMap = context.MergedJobDataMap; 

     string jobSays = dataMap.GetString("jobSays"); 
     float myFloatValue = dataMap.GetFloat("myFloatValue"); 
     ArrayList state = (ArrayList) dataMap.Get("myStateData"); 
     state.Add(DateTime.UtcNow); 

     Console.WriteLine("Instance {0} of DumbJob says: {1}", instName, jobSays); 
    } 
} 

Вы также можете просто запустить поток в службе окна, следить, когда вы в последний раз выстрелили ех, а затем восстановить после этого. Это немного проще, чем Quartz, и будет выполнять те же самые вещи. Тем не менее, ваш вопрос был специфичным для кварца.

+1

Но где он действительно подключается к Service.exe? –

+0

Вы вызываете его в методе «Выполнение (...)». –

+0

Как? Синтаксически говоря –