#windows #service
#Windows #Обслуживание
Вопрос:
У нас есть процесс, который выполняется как служба Windows, этот процесс служит сервером интерфейса, обрабатывающим входящие сообщения, преобразует их и отправляет в другой интерфейс.
это довольно сложный процесс, для него необходимо загрузить много вещей в память, и это занимает некоторое время (несколько минут). в силу своей природы, когда мы запускаем ее с помощью службы Windows, она остается в состоянии «запуск» в течение очень долгого времени (иногда более 20 минут), даже когда мы видим, что процесс уже работает и сообщения обрабатываются нормально (судя по его журналам).
итак, вопрос в том, когда служба считается «запущенной» и когда она считается «запущенной»? на основании каких факторов?
Комментарии:
1. Каждая служба Windows сообщает о своем статусе диспетчеру управления службами с помощью функции SetServiceStatus . Служба считается «запущенной», когда она сообщает Windows, что она запущена, это полностью зависит от программиста, когда это произойдет. (Если вы используете класс ServiceBase, предоставляемый . NET framework, служба сообщает, что она запускается, как только возвращается функция OnStart.)
Ответ №1:
Состояние запуска завершается при завершении onstart.
Вы должны написать начальный код после события onstart.
puclic class Service1
{
private Timer timer = new Timer();
protected override void OnStart(string[] args)
{
this.timer.Elapsed = new ElapsedEventHandler(OnElapsedTime);
this.timer.Interval = 1 * 1000; // 1 second
this.timer.Enabled = true;
}
private void OnElapsedTime(object source, ElapsedEventArgs e)
{
this.timer.Enabled = false; // OnElapsedTime run only one time
// Write your code
}
}
Комментарии:
1. Вы предполагаете, что OP говорит о службе .NET. Это нормально, но вы должны явно сказать об этом.
2. Спасибо! это действительно была служба .NET, я должен был упомянуть об этом. Я вижу, что у нас есть это переопределение OnStart в коде, и теперь я вижу, какие области следует искать с точки зрения потребления большей части времени.