может кто-нибудь дать мне знать, как запустить длительный процесс из службы Windows (на C#)? процесс может занять несколько часов. служба должна проверять базу данных для выполнения любых ожидающих заданий. каждая работа может занять некоторое время. если нет ожидающих заданий, тогда он должен спать на 2 минуты (настраивается), а затем запускаться снова. как я могу это сделать с помощью службы Windows? Заранее спасибо.Как запустить длительный процесс в службе windows?
ответ
- Создайте новый проект «Служба Windows».
- Переопределить метод OnStart для создания потока. Этот поток будет обрабатывать опрос и обработку.
- Переопределите метод OnStop для установки флага. Поток с шага 2 следит за этим флагом и завершает его соответственно.
- Откройте конструкционную поверхность класса обслуживания. В нижней части окна «Свойства» находится ссылка «Добавить установщик». Нажмите на нее.
- Установите устройство с помощью InstallUtil или поместите его в пакет установщика.
Я пишу услуги все время, поэтому не стесняйтесь спрашивать меня о последующих вопросах.
В этом нет специального трюка, за исключением того, что вы не можете использовать какие-либо GUI/Forms или пользовательский ввод. Служба Windows по определению не имеет ввода/вывода пользователя. Напишите ошибки в журнале событий, и все в порядке.
Я не могу поставить бесконечный цикл в методе запуска для службы, иначе служба не запустится. поэтому я искал какой-то механизм для запуска кода обработки задания каждые несколько минут. Мне удалось сделать это, используя компонент Timer и установив его интервал, но затем мне пришлось остановить таймер от тикания, когда процесс запущен. Я достиг этого, отключив таймер перед запуском процесса и включив его после завершения процесса. Спасибо за ваш ответ. – RKP
попробуйте следующее: System.Threading.Thread.Sleep (2 * 60 * 1000); – Jay
Гораздо проще использовать запланированные задачи Windows, чем разрабатывать собственное приложение, вы должны попробовать.
Если это не работает так, как вы ожидаете, как сказал Джей, нет никакого трюка, просто помните, что нет графического интерфейса.
эта услуга должна просыпаться каждые две минуты, и моя ИТ-политика компании не позволяет запланированной задаче иметь время сна менее 10 минут. поэтому мне пришлось выбрать вариант службы Windows. это было бы намного проще с консольным приложением, легко отлаживаемым. спасибо за ответ – RKP
вы должны создать консоль приложения что-то вроде этого
static void Main(string[] args)
{
bool createdNew;
Mutex m = new Mutex(true, "YourBatchProcessor", out createdNew);
if (!createdNew)
{
Console.WriteLine("YourBatchProcesso is already running!");
return;
}
//your code goes here
}
и, как Gmoliv сказал создавать запланированные задачи, чем запускать каждые 2 минуты
или если вы хотите написать службы окна, то ваш код услуги, как
public class YourServrClass
{
private int numticks = 0;
private Timer _timer;
private bool _IsStarted;
private int Interval =2000; //ticks //2 sec.
#region Initializer
public YourServrClass()
{
InitializeComponent();
_timer = new Timer();
_timer.Interval = Interval;
_timer.Elapsed += new ElapsedEventHandler(this.Timer_Tick);
}
#endregion
#region Timer_Tick to process
private void Timer_Tick(object sender, System.Timers.ElapsedEventArgs e)
{
numticks++;
if (_IsStarted)
{
_timer.Stop();
//your code //ProcessYourData();
_timer.Start();
}
}
#endregion
protected override void OnStart(string[] args)
{
_IsStarted=true;
}
protected override void OnStop()
{
_IsStarted=false;
}
}
спасибо за ответ. Я также решил использовать компонент Timer, но мой код немного отличается. Я запускаю таймер в методе «OnStart», останавливаю его в методе «OnStop» и в обработчике событий «Истекший». Я отключу таймер непосредственно перед запуском процесса и снова включите его после завершения процесса. он работает сейчас. – RKP
- 1. Как запустить длительный процесс php
- 2. Как запустить длительный процесс с использованием сервлета
- 3. Как запустить cover.py на длительный процесс?
- 4. Хостинг длительный процесс в IIS
- 5. Службы Windows C# + длительный рабочий процесс
- 6. Как остановить длительный рабочий процесс WF4?
- 7. Как я могу запустить длительный процесс в скрипте CGI Perl?
- 8. PHP длительный процесс в браузере
- 9. Длительный процесс в ASP.Net MVC
- 10. Реализуйте длительный процесс в приложении для магазина Windows
- 11. Как запустить программу GUI в службе Windows?
- 12. Как запустить ASP.NET MVC в службе Windows
- 13. Как синхронизировать длительный процесс в C#
- 14. RnR: Длительный процесс
- 15. Длительный процесс java
- 16. Как создать длительный процесс на C#?
- 17. Как предотвратить длительный процесс висит окно WxWidgets
- 18. Как разместить длительный процесс в Azure Cloud?
- 19. Как имитировать длительный процесс (сон) в Дарте?
- 20. Как использовать длительный процесс в winforms C#
- 21. Как запустить длительный процесс Nodejs с .env-файлом на Windows Server 2012
- 22. Длительный фоновый процесс в PHP на машине Windows
- 23. NServiceBus длительный процесс, который отключен
- 24. Длительный процесс, который вернет файл
- 25. Возможно ли запустить Orleans в службе Windows?
- 26. Невозможно запустить приложение .exe в службе Windows
- 27. Как запустить неинтерактивный процесс как другого пользователя в службе Windows с помощью C#?
- 28. Длительный процесс отладки. Strace, brk
- 29. Завершение продолжительного процесса в службе Windows
- 30. Как EJB может распараллелить длительный интенсивный процесс?
На самом деле мне не нравится сервис, потому что он продолжает бить DB каждые две минуты, чтобы проверить, есть ли какая-либо работа для выполнения, и это потеря процессорного времени, когда их нет. вместо этого мне нравится управляемая событиями модель, с помощью которой процесс просыпается только тогда, когда выполняется незавершенное задание. Я думаю, что это возможно с MSMQ, но я не знаком с ним, нужно выяснить, как его использовать.Спасибо за ответ. этот процесс должен иметь возможность генерировать несколько потоков, чтобы сэкономить время при выполнении нескольких ожидающих заданий. есть также требование убить процесс, если он занимает больше времени, чем обычно. – RKP
Забавно, что вы должны упомянуть MSMQ. На самом деле, SQL Server отправляет сообщения MSMQ, когда есть работа. Посредством службы следит за очередью. Однажды очень редко, когда я потеряю одно сообщение MSMQ, но это происходит только тогда, когда я отправляю десятки тысяч сообщений за несколько секунд. –