Зупинка служби Windows, коли опція зупинки неактивна


80

Я створив службу Windows і в службі на панелі керування -> адміністративні інструменти -> послуги, її статус починається.

Я хочу зупинити цю послугу, але опція зупинки неактивна. Як я можу запустити / зупинити послугу?

Кожного разу, коли я перезапускаю, він зупиняється, і я можу його видалити.


Що ти хочеш досягти? Ви хочете зупинити це або видалити?
Anirudh Ramanathan

видалити його, але перед видаленням потрібно зупинитися. Наразі статус починається.
DotnetSparrow

Ви намагалися вбити exe, який запускає службу, за допомогою диспетчера завдань?
Chris J

1
@Chris: Я не бачу їх у списку під диспетчером завдань. Може тому, що служба ще не розпочалася?
DotnetSparrow

Відповіді:


147

Якщо виконати команду:

sc queryex <service name>

де - ім'я послуги, а не відображуване ім'я (спулер, не друкарський спулер), у підказці cmd він поверне ПІД процесу, як служба працює. Візьміть цей ПІД і запустіть

taskkill /F /PID <Service PID>

змусити ПІД зупинитися. Іноді, якщо процес зависає під час зупинки графічного інтерфейсу, це не дасть вам нічого зробити з послугою.


2
Windows 2000 не підтримує, sc ..тому я локалізував процес у властивостях цієї служби Path to executableта вбив його в taskmgr.
AD

@ DrPppr242, Ви впевнені, що це безпечний варіант?
Pacerier

3
Єдиний спосіб, як я змусив це працювати, - це запустити командний рядок як адміністратор.
hurleystylee

2
Це не працює для проклятої служби стегон Baidu. Навіть запуск cmd від імені адміністратора. Іноді я відчуваю, що не є власником свого комп’ютера з цією дерьмовою ОС ...
Пауло Карвальо

1
Я спробував цей запущений CMD як адміністратор. Я отримую таку помилку: Не вдається зупинити процес за допомогою PID XXXX. Причина: доступ відмовлено.
Floppy88


8

Якщо опція зупинки неактивна, тоді ваша служба не вказала, що приймає, SERVICE_ACCEPT_STOPколи востаннє дзвонила SetServiceStatus. Якщо ви використовуєте .NET, тоді вам потрібно встановити CanStopвластивість у ServiceBase.

Звичайно, якщо ви приймаєте запити на зупинку, то краще переконайтеся, що ваша служба може безпечно обробляти ці запити, особливо якщо ваша служба все ще прогресує через свій код запуску.


7

Використовуйте диспетчер завдань, щоб знайти Службу та вбити її звідти за допомогою Завершити завдання. Завжди робить трюк для мене.

Якщо ви зробили службу самостійно, розгляньте можливість видалення довготривалих операцій із події OnStart, як правило, саме це спричиняє невідповідність служби.


1
ЗАВДАННЯ ЗАВДАННЯ від диспетчера завдань не зупиняє служби, налаштовані як "NOT_STOPPABLE", наприклад, захисник Windows чи деякі інші служби безпеки від третіх сторін, ви отримаєте лише повідомлення про відмову у доступі.
арана

5

Як згадував Аарон вище, SERVICE_ACCEPT_STOPдо моменту його розробки деякі служби не приймають повідомлень. І це важко закодовано у виконуваний файл. Період. Обхідним шляхом було б не запускати його, а оскільки ви не можете змінити його властивості, примусово зробіть наступне:

  1. Завантажте в безпечний режим (користувачам Windows 10 може знадобитися msconfig> завантаження> безпечне завантаження)
  2. Повторно ввімкніть HKLM> Система> ControlSet001> Послуги
  3. Знайдіть свою послугу
  4. Змініть клавішу "Пуск" на 3 (ручний запуск) або 4 (вимкнений)

Якщо ви не можете змінити запис, клацніть правою кнопкою миші на назві вашої послуги на лівій панелі, виберіть «Дозволи», перевірте, чи має «Повний доступ» усі та повторіть крок 4 ще раз.

Не забудьте знову вимкнути безпечне завантаження з msconfig і перезавантажтесь!


1
Чудова відповідь. Це спрацювало, тому що служба не дозволяла мені його видалити, навіть з ПІД. Після редагування значення ключа запуску та перезапуску я зміг видалити службу. Дякую.
Дуке,


1

Відкрийте командний рядок із доступом адміністратора та введіть туди такі команди.

а)

tasklist

він відображає список усіх доступних послуг. Там ви можете побачити послугу, яку ви хочете зупинити / запустити / перезапустити. Запам’ятайте значення PID послуги, яку потрібно примусово зупинити.

б) Тепер введіть

taskkill /f /PID [PID value of the service] 

і натисніть клавішу Enter. Після успіху ви отримаєте повідомлення «УСПІХ: процес з PID припинено».

Ex : taskkill /f /PID 5088

Це примусово вб’є заморожену службу. Тепер ви можете повернутися до диспетчера серверів і перезапустити службу.


0

Я вирішив проблему наступними кроками:

  1. Відкрийте "services.msc" з команди / Windows RUN.

  2. Знайдіть послугу (яка сіра).

  3. Двічі клацніть на цій службі та перейдіть на вкладку "Відновлення".

  4. Переконайтеся, що

    • Дія першої помилки вибирається як "Не вживати заходів".
    • Друга дія відмови вибрана як "Не вживати ніяких дій".
    • Подальша дія Помилок вибирається як "Не вживати заходів".

    та натисніть OK.

Тепер служба не намагатиметься перезапустити, і ви зможете видалити сіру службу зі списку послуг (тобто сіра буде знищена).


Це звучить як хороший момент, але всі варіанти, які ви пропонуєте в моєму Win10, сірі. Я застряг. Щоразу, коли я зупиняю процес (CyOptics), він починається знову .... і він з'їдає> 40% мого процесора :-( Я робив усі спроби з доступом адміністратора
emare
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.