Персонализирана услуга за планиране на събития на Windows

Трябва да създам услуга на Windows, която работи точно като планировчика на задачи, тъй като мога да конфигурирам по кое време да се изпълнява и по същество просто извиква .NET клас в това планирано време (повтарящо се). Какъв е препоръчителният начин да направите това? Освен това всяка информация за инсталиране/премахване на тази услуга ще бъде оценена!

Актуализация: Използването на планировчика на задачи не е опция (изискване на клиента, нещо общо с техните ИТ стандарти). Това беше и моето предложение към тях, но няма да стане.

Решение: Благодаря на всички за отговорите, решението Quartz.Net изглежда особено добре, но намерих следното, което има точно това, от което се нуждая:

http://www.c-sharpcorner.com/UploadFile/ajifocus/AppScheduler05262006074807AM/AppScheduler.aspx?ArticleID=b52f76da-943f-4807-9675-869f135ef2cd


person Abdullah Jibaly    schedule 22.12.2008    source източник


Отговори (8)


Можете да опитате .NET Task Scheduler http://TaskService.Codeplex.com. Този проект предоставя възможност за планиране на .NET сборки, които да се изпълняват по всяко време на деня с различни видове повторения като ежедневно, почасово, седмично, на всеки 5 часа или на всеки трети ден.

person Joseph Guadagno    schedule 09.04.2009
comment
Защо не използвате вградения в Windows Task Scheduler? Изглежда неефективно да се добавя друга услуга, която прави същото като вградена функция на Windows. TaskService на CodePlex прави ли нещо значително по-различно или по-добро от Windows Task Scheduler? - person Foredecker; 22.05.2010

Можете да вградите планировчика на Quartz.Net в услуга.

person PeeVeeGee    schedule 25.12.2008
comment
+1 за Quartz.NET в услуга на Windows. Току-що го внедрих с персонализиран конфигурационен раздел, за да дефинирам всяка от задачите, които искам да изпълнявам, и използвах синтаксиса на cron, за да определя честотата на всяка от тях. Работи наистина добре. - person jeremcc; 25.12.2008

Ако имате достъп до кутията, защо просто не използвате програмата за планиране на задачи на Windows и извикване на функционалност от конзолен exe. Много по-лесно от повторното изобретяване на колелото.

person Kev    schedule 22.12.2008
comment
Съгласен съм. Защо просто не създадете обвивка exe, която извиква вашия клас, когато се изпълнява, и не използвате програмата за планиране? - person Tim; 23.12.2008

Имах същия проблем преди, планировчикът на задачи има малък проблем сам по себе си. Никога не може да бъде надеждна замяна на cron на linux. Веднъж трябваше да напиша услуга, която да направи точно това. Имах System.Threading.Timer, работещ в цикъл от 1 секунда. След това проверява за събития, които трябва да бъдат задействани (външен exe) според конфигурацията, която съхраних в xml файл.

person faulty    schedule 25.12.2008
comment
Графикът на задачите на Windows е услуга. Как го намирате за проблемно? Той също така се справя добре с някои сложни проблеми, включително правилно стартиране на неповдигнат процес и използване на идентификационни данни. Доколко сте уверени, че домашно създадено решение или нещо извън CodePlex би било толкова сигурно или толкова надеждно, колкото услугата Windows Task? - person Foredecker; 22.05.2010

Ако създавате система за планиране, е много по-добре да напишете услуга за Windows. Въпреки че са трудни за отстраняване на грешки, ако преместите цялата функционалност извън услугата в класове помощни и сервизни агенти, можете лесно да тествате функционалността, без да е необходимо да се занимавате с услугата.

След това можете да изложите каквато и да е информация, която трябва да предоставите, на предния край чрез услугите на WCF. Сега те могат да бъдат хоствани във всеки изпълним файл, така че услугата Windows работи добре. Предимството на тактиката за обслужване на Windows е, че нямате нужда от работен плот. Планираните задачи са (или трябва да бъдат) предназначени да се изпълняват във фонов режим. Услугите на Windows са добър подход към фонови задачи.

Разгледах следпродажбени системи за планиране на трети страни, програми за планиране с отворен код и quartz.net. Ние сме избрали второто. Ако бюджетът ви може да плати сметката, погледнете системи за планиране като JAMS или други.

person Tim    schedule 14.12.2009

О, има толкова много.

Бих започнал със стандартна услуга на Windows в .Net и бих използвал функцията Properties\Settings, за да съхраня моето планирано време (това наистина работи само с един път - по-сложна конфигурация ще е необходима за повече от един път).

Бих включил също низ, за ​​да дефинирам асемблито/класа, който исках да стартирам и в тази конфигурация, и да се уверя, че асемблирането има клас, който или е наследил от базов клас, или е имплементирал интерфейс, за да мога да го заредя като известен тип и Изпълнете известен метод, наречен нещо като Execute().

Или можете да дефинирате метода, който искате да извикате, в конфигурационния файл и да използвате отражение, за да извикате този метод.

person Brody    schedule 22.12.2008

Съжалявам, отговорът ми не ви казва как да приложите това.

Защо вашият клиент би забранил използването на някаква вградена функция на ОС, като същевременно позволява да се изпълнява неин домашно клонинг?

Мисля, че ще бъде по-малко работа да се опитате да убедите клиента си, че това е глупаво изискване, отколкото да пресъздадете Windows Scheduler като стабилна услуга. Освен че ще спестите време, като просто използвате съществуващия, вероятно ще получите по-добро решение. Печелившо за всички :)

person Wouter van Nifterick    schedule 25.12.2008

Най-важното е да осъзнаете, че създаването на услуга на Windows е доста сложно за правилно. Това е особено вярно за версия 6 и по-нови продукти, тъй като услугите са изолирани от работния плот. Ето няколко коментара

  • Услугите са по-трудни за отстраняване на грешки от програмата за базов потребителски режим.
  • Услугите не могат да взаимодействат с потребителя на V6 и по-нови операционни системи. Така че не можете да им дадете конзола или да ги накарате директно да изскачат кутии за съобщения.
  • Комуникацията с услуги обикновено се извършва чрез извикване на отдалечена процедура или COM извън процеса. И двете могат да бъдат сложни дори за привидно съперничещи неща.
  • Услугите работят със значителен плам, така че трябва да бъдат значително по-надеждни и ефективни от другите изпълними файлове.
  • В зависимост от контекста на сигурността може да е трудно да накарате услуга да причини други неща да се случват в системата.

Вместо service бих препоръчал "deamon". Това ще бъде малка програма, която има скрит потребителски интерфейс - просто я стартирайте при стартиране, както всяко друго приложение. Той ще работи в контекста на потребителя и може да прави всичко, което потребителят може да направи (което вероятно е това, което искате). Можете да му дадете икона в областта, ако имате нужда, или да използвате сигнал от някое от другите си приложения, за да разкрие простия си потребителски интерфейс.

person Foredecker    schedule 25.12.2008