Остановка службы windows, когда параметр остановить неактивен
Я создал службу windows и в службе на панели управления -> Администрирование -> Службы, ее состояние запускается.
Я хочу остановить эту службу, но опция stop неактивна. Как я могу запустить/остановить службу?
каждый раз, когда я перезапускаю, то он становится остановлен, и я могу удалить его.
8 ответов:
Если вы запустите команду:
sc queryex <service name>
где имя службы, а не отображаемое имя (диспетчер очереди печати, а не Диспетчер очереди печати), в командной строке он вернет PID процесса, в котором запущена служба. Возьми этот пид и беги
taskkill /F /PID <Service PID>
чтобы заставить PID остановиться. Иногда, если процесс зависает при остановке GUI не позволит вам ничего сделать с сервисом.
вы можете сделать это в одной строке (полезно для ci-сред):
taskkill /fi "Services eq SERVICE_NAME" /F
Filter - > Services - > ServiceName равно SERVICE_NAMES - > Force
Источник:https://technet.microsoft.com/en-us/library/bb491009.aspx
если опция stop неактивна, то ваша служба не указала, что она принимает
SERVICE_ACCEPT_STOP
когда он последний раз звонилSetServiceStatus
. Если вы используете .NET, то вам нужно установитьCanStop
в собственностьServiceBase
.конечно, если вы принимаете запросы на остановку, то вам лучше убедиться, что ваша служба может безопасно обрабатывать эти запросы, особенно если ваша служба все еще прогрессирует через свой код запуска.
используйте диспетчер задач, чтобы найти службу и убить его оттуда с помощью Снять Задачу. Всегда делает трюк для меня.
Если вы сами создали службу, рассмотрите возможность удаления длительных операций из события OnStart, обычно именно это приводит к тому, что Служба не реагирует.
Откройте командную строку с правами администратора и введите там следующие команды .
a)
tasklist
выводит список всех доступных сервисов . Здесь вы можете увидеть сервис, который вы хотите остановить/запустить/перезапустить . Запомните значение PID службы, которую вы хотите принудительно остановить.
b) теперь введите
taskkill /f /PID [PID value of the service]
и нажмите enter. На успех вы получите сообщение "Успех: процесс с PID был завершенный."
Ex : taskkill /f /PID 5088
это принудительно убьет замороженную службу. Теперь вы можете вернуться в Диспетчер серверов и перезапустить службу.
как Аарон упоминал выше, некоторые услуги не принимают
SERVICE_ACCEPT_STOP
сообщения, ко времени его разработки. И это жестко закодировано в исполняемый файл. Период. Workaroud не должен был бы его запускать, и поскольку вы не можете изменить его свойства, принудительно выполните следующие действия:
- загрузка в безопасный режим (пользователям Windows 10 может понадобиться msconfig > boot > safe boot)
- Regedit в HKLM > System > ControlSet001 > Services
- найдите свой сервис запись
- измените клавишу "Пуск" на 3 (ручной запуск) или 4 (отключено)
Если вы не можете изменить запись, щелкните правой кнопкой мыши на имя службы на левой панели, выберите "Разрешения", убедитесь, что " все " имеет полный доступ и повторите шаг 4.
Не забудьте снова отключить безопасную загрузку с msconfig и перезагрузиться !
У меня была та же проблема. Если вы не являетесь администратором на компьютере, нужно запустить сервис от имени администратора.
Я решил проблему с помощью следующих шагов:
открыть "услуг.msc " из команды / Windows RUN.
найдите службу (которая выделена серым цветом).
дважды щелкните на этой службе и перейдите на вкладку "Восстановление".
обеспечить
- первое действие отказа выбрано как "не предпринимать никаких действий".
- второе действие отказа выбрано как " принять нет действие."
- последующее действие сбоев выбирается как "не предпринимать никаких действий".
и нажмите кнопку OK.
теперь служба не будет пытаться перезапустить, и вы можете удалить серую службу из списка служб (т. е. серый исчезнет).