Как решить Ошибка "Указанная служба была отмечена для удаления"
Я пытаюсь удалить службу Windows с помощью sc delete <service name>
и встретить следующую ошибку:
[SC] DeleteService FAILED 1072:
Указанная служба помечена для удаления.
Что я уже сделал:
Проблема сохраняется.
Каков следующий шаг?
Ответы
Ответ 1
Могут быть несколько причин, которые приводят к тому, что служба застревает в "отмеченной для удаления".
-
Открывается Process Explorer SysInternals. Закрытие должно привести к автоматическому удалению службы.
-
Диспетчер задач открывается.
-
Открывается консоль Microsoft Management Console (MMC). Чтобы все экземпляры были закрыты, запустите taskkill/F/IM mmc.exe
.
-
Открывается консоль служб. Это то же самое, что и предыдущий пункт, поскольку консоль службы размещена в MMC.
-
Открывается средство просмотра событий. Опять же, это то же самое, что и третья точка.
-
Доступен ключ HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\{имя службы}.
-
Кто-то еще зарегистрировался на сервере и открыл одно из ранее упомянутых приложений.
-
Экземпляр Visual Studio, используемый для отладки службы, открыт.
Ответ 2
Это также может быть вызвано открытием консоли служб. Windows фактически не удалит службу, пока она не будет закрыта.
Ответ 3
В моем случае он работал после закрытия Services
. Проверьте, открыт ли Services.msc
, если да, закройте его и проверьте, что какой-либо процесс обслуживания находится в Task Manager
.
Ответ 4
Привет, ребята, у меня была такая же проблема, наконец я решил убить сервисный процесс.
для этого попробуйте выполнить следующие шаги:
-
получить идентификатор процесса с помощью
sc queryex <service name>
-
уничтожить
taskkill/F/PID <Service PID>
Ответ 5
Удаление ключей реестра, как было предложено выше, застряло у моей службы в состоянии остановки. У меня сработала следующая процедура:
откройте диспетчер задач> выберите вкладку службы> выберите службу> щелкните правой кнопкой мыши и выберите "перейти к процессу"> щелкните правой кнопкой мыши процесс и выберите "Завершить процесс"
Служба должна исчезнуть после этого
Ответ 6
Обнаружена еще одна вещь, которую нужно проверить - посмотрите в диспетчере задач - если другие пользователи подключены к этому полю, даже если они "отключены", вы должны их вывести, чтобы наконец удалить сервис.
Ответ 7
Это то, что сработало для меня:
- Я попал в ту же проблему: моя служба застряла в "помечена для удаления".
- Я открыл services.msc Моя служба действительно отображалась как работающая, хотя она уже была удалена.
- Я нажал Stop Получено сообщение об ошибке, в котором говорится, что служба не находится в состоянии получения управляющих сообщений. Тем не менее, служба была остановлена.
- Закрытые услуги .msc.
- Заново открытые услуги .msc. - Служба ушла (больше не отображается в списке услуг).
(Среда была Windows 7.)
Ответ 8
Это означает, что служба по-прежнему указана как отключенная в services.msc. Просто закройте services.msc и откройте его как администратор... Служба не будет указана. Теперь установите службу с помощью команды,
installutil "путь обслуживания"
Ответ 9
Похоже, что в версиях Windows позже Windows 7 (непроверено, но по последнему опыту с Windows Server 2012 R2) диспетчер управления службами (SCM) является более строгим.
В то время как в Windows 7 он просто запускает другой процесс, теперь он проверяет, все еще работает сервисный процесс, и может возвращать ERROR_SERVICE_MARKED_FOR_DELETE (1072) для любого последующего вызова CreateService/DeleteService, даже если служба оказывается остановленной.
Я говорю здесь код Windows API, но хочу четко изложить, что происходит, поэтому эта последовательность может привести к указанной ошибке:
SC_HANDLE hScm = OpenSCManager(nullptr, nullptr, SC_MANAGER_ALL_ACCESS);
SC_HANDLE hSvc = OpenService(hScm, L"Stub service", SERVICE_STOP | SERVICE_QUERY_STATUS | DELETE);
SERVICE_STATUS ss;
ControlService(hSvc, SERVICE_CONTROL_STOP, &ss);
// ... wait for service to report its SERVICE_STOPPED state
DeleteService(hSvc);
CloseServiceHandle(hSvc);
hSvc = nullptr;
// any further calls to CreateService/DeleteService will fail
// if service process is still around
Причина, по которой сервисный процесс все еще существует после того, как он уже сообщил о состоянии SERVICE_STOPPED, неудивительно. Это обычный процесс, основной поток которого "застревает" в своем вызове API StartServiceCtrlDispatcher
, поэтому он сначала реагирует на действие управления остановкой, но затем должен выполнить оставшуюся последовательность кода.
Как ни печально, SCM/OS не справляется с этим должным образом для нас.
Программное решение является простым и точным: получить обработчик исполняемого процесса службы до остановки службы, а затем дождаться, когда этот дескриптор станет сигналом.
При приближении к проблеме с точки зрения системного администрирования решение также должно дождаться полного исчезновения сервисного процесса.
Ответ 10
В моем случае это было вызвано необработанным исключением при создании источника eventLog. Используйте try catch, чтобы указать причину.
Ответ 11
В моем случае я выполняю taskkill /f /im dongleserver.exe
,
где dongleserver.exe
- это файл моей программы exe.
Затем я могу переустановить мою программу уже.
Ответ 12
Закрытие каждого открытого в данный момент окна, за которым следует следующая команда, решила проблему для меня:
taskkill /F /IM mmc.exe
Ответ 13
Если шаги, предоставленные @MainMa, не работали, выполните следующие шаги
Шаг 1 Попробуйте убить процесс из диспетчера задач Windows или с помощью taskkill/F/PID. Вы можете найти pid процесса командой "sc queryex". Попробуйте выполнить следующий шаг, если вы все еще не можете удалить.
Шаг 2 Если выше
Запустить Автозапуск для Windows Поиск службы по имени и удаление результатов.
Ответ 14
Основная причина ошибки - процесс не останавливается.
чтобы разрешить его запуск диспетчера задач, перейдите к службам и посмотрите, сможете ли вы по-прежнему видеть свою службу, чем перейти к процессу этого процесса обслуживания и завершения. Затем проблема будет решена полностью.
Ответ 15
У меня была эта проблема, когда я использовал Application Verifier для проверки моего сервиса win. Даже после того, как я закрыл приложение Ver, моя служба была заблокирована от удаления. Только удаление службы из App Ver разрешило проблему, и служба была удалена сразу. Похоже, какой-то процесс по-прежнему использует ваш сервис после того, как вы попытались его удалить.
Ответ 16
действия:
шаг-1 перейти к местоположению C:\Windows\Microsoft.NET\Framework\v4.0.30319
step-2 выполнить команду: installutil/u full-path/servicename.exe
step-3 закрыть панель обслуживания и снова открыть ее
шаг-4 выполнить команду: installutil full-path/servicename.exe