Как решить Ошибка "Указанная служба была отмечена для удаления" - программирование

Как решить Ошибка "Указанная служба была отмечена для удаления"

Я пытаюсь удалить службу Windows с помощью sc delete <service name> и встретить следующую ошибку:

[SC] DeleteService FAILED 1072:

Указанная служба помечена для удаления.

Что я уже сделал:

Проблема сохраняется.

Каков следующий шаг?

4b9b3361

Ответ 1

Могут быть несколько причин, которые приводят к тому, что служба застревает в "отмеченной для удаления".

  1. Открывается Process Explorer SysInternals. Закрытие должно привести к автоматическому удалению службы.

  2. Диспетчер задач открывается.

  3. Открывается консоль Microsoft Management Console (MMC). Чтобы все экземпляры были закрыты, запустите taskkill/F/IM mmc.exe.

  4. Открывается консоль служб. Это то же самое, что и предыдущий пункт, поскольку консоль службы размещена в MMC.

  5. Открывается средство просмотра событий. Опять же, это то же самое, что и третья точка.

  6. Доступен ключ HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\{имя службы}.

  7. Кто-то еще зарегистрировался на сервере и открыл одно из ранее упомянутых приложений.

  8. Экземпляр 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