Служба Windows застряла в состоянии" запуск " как учетная запись локальной системы
Я разработал http-сервер через консольное приложение на C# и решил превратить его в службу Windows, чтобы иметь возможность инициализировать его без необходимости входа в систему.
я следовал всем шагам в как создать службу Windows и выбрал учетную запись как "локальная система", но когда я устанавливаю на своем сервере машину и нажимаю кнопку "Пуск", это занимает некоторое время и дает следующую ошибку:
ошибка 1053: служба не ответила на на запрос запуска или управления своевременно.
после этого статус службы остается застрявшим в "запуске", и приложение не работает, и я даже не могу остановить службу больше.
пытаясь обойти эту проблему, я изменил ее на "сетевую службу", поэтому она началась нормально, но приложение не слушало в порту, который я установил, когда я проверил в командной строке с помощью команды"netstat-an". Но приложение слушает нормально, если я запускаю его как консоль приложение.
поэтому я ищу ответ на один из этих двух вопросов:
- что я должен сделать, чтобы служба начиналась правильно с учетной записи локальной системы?
- если я решу использовать учетную запись сетевой службы, что я должен заботиться о том, чтобы гарантировать, что моя служба работает как сервер?
4 ответов
когда я преобразовал консольное приложение в службу windows, я просто поместил свой код непосредственно в метод OnStart. Однако я понял, что метод OnStart должен запустить службу, но должен закончиться некоторое время, чтобы служба действительно начала. Поэтому я создал поток, который запускает мою службу,и позволил методу OnStart завершить. Я проверил, и сервис работал просто отлично. Вот как это был код:
protected override void OnStart(string[] args)
{
Listener(); // this method never returns
}
вот как это работает:
protected override void OnStart(string[] args)
{
Thread t = new Thread(new ThreadStart(Listener));
t.Start();
}
но я все еще не понимаю почему служба запущена (передала статус "запуск", но не работала), когда я использовал учетную запись сетевой службы. Если кто знает, буду рад узнать причину.
если у вас есть служба, которая не отвечает или показывает ожидание в службах Windows, которые вы не можете остановить, используйте следующие инструкции, чтобы заставить службу остановиться.
Click the Start menu
Click Run or in the search bar type services.msc
Press Enter
Look for the service and check the Properties and identify its service name
Once found, open a command prompt. Type sc queryex [servicename].
Press Enter
Identify the PID
In the same command prompt type taskkill /pid [pid number] /f
Press Enter
Проверьте журнал событий приложений Windows, он может содержать некоторые записи из автоматически созданного источника событий вашей службы (который должен иметь то же имя службы).
вы можете попытаться увеличить время ожидания службы windows с помощью ключа в реестре
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
"ServicesPipeTimeout" =dword: 300000 (30 секунд)
если он не существует, он должен быть создан.