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

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

[SC] DeleteService FAILED 1072:

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

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

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

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

Комментарии к вопросу (7)
Решение

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

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

  2. Менеджер задач открыт.

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

  4. Услуги консоли открыты. Это то же самое, что и в предыдущем пункте, поскольку консоль Сервисов размещена в MMC

  5. Зритель событий открыт. Опять же, это то же самое, что и третий пункт.

  6. Ключ HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ {название службы} существует.

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

  8. Экземпляр Visual Studio , используемый для отладки сервиса , открыт.

Комментарии (17)

Это также может быть вызвано тем, что консоль Сервисов открыта. Windows фактически не удалит службу, пока она не будет закрыта.

Комментарии (7)

В моем случае это сработало после закрытия «Услуги». Проверьте, открыт ли Services.msc, если да, закройте его и проверьте, что какой-либо процесс обслуживания находится в Task Manager.

Комментарии (0)

У меня была та же проблема, наконец, я решил убить процесс обслуживания.

для этого попробуйте ниже шагов:

  • получить идентификатор процесса обслуживания с

    sc queryex < имя службы >

  • убить процесс с

    taskkill / F / PID < Service PID >

Комментарии (3)

Это означает, что служба по-прежнему указана как отключенная в services.msc. Просто закройте services.msc и снова откройте как администратор... Услуга не будет указана в списке. Теперь установите сервис, используя команду

installutil "путь обслуживания"

Комментарии (0)

Удаление ключей реестра, как указано выше, привело к тому, что мой сервис застрял в состоянии остановки. Следующая процедура сработала для меня:

открыть диспетчер задач > выберите вкладку услуг > выберите услугу > щелкните правой кнопкой мыши и выберите «перейти к процессу» > щелкните правой кнопкой мыши процесс и выберите «Конец процесса»

Служба должна уйти после этого

Комментарии (0)

Обнаружена еще одна вещь, которую нужно проверить - посмотрите в диспетчере задач - если к этому блоку подключены другие пользователи, даже если они «отключены», вы должны фактически подписать их, чтобы служба наконец удалила.

Комментарии (1)

Похоже, что в версиях Windows, отличных от Windows 7 (непроверенных, но по последним данным Windows Server 2012 R2), менеджер управления услугами (SCM) является более строгим.

В то время как в Windows 7 он просто порождает другой процесс, теперь он проверяет, все ли еще существует процесс обслуживания, и может возвращать ERROR_SERVICE_MARKED_FOR_DELETE (1072) для любого последующего вызова CreateService / DeleteService, даже если служба, по-видимому, остановлена.

Я говорю здесь о коде Windows API, но хочу четко обрисовать, что происходит, чтобы эта последовательность могла привести к упомянутой ошибке:

& Лт;!- язык: c ++ - >

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 не справляется с этим должным образом для нас. Программное решение довольно простое и точное: получите дескриптор процесса исполняемого файла службы перед остановкой службы, а затем подождите, пока этот дескриптор не будет сигнализирован.

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

Комментарии (0)

Это то, что сработало для меня

  • Я столкнулся с той же проблемой: мой сервис застрял в «помечен для удаления».
  • Я открыл services.msc Мой сервис появился как работающий, хотя он был уже удален.
  • Я нажал Стоп Получил сообщение об ошибке, в котором говорится, что служба не в состоянии получать контрольные сообщения. Тем не менее, служба была остановлена.
  • Закрытые услуги.msc.
  • Открытые услуги.msc.
    • Сервис исчез (больше не отображается в списке услуг).

(Среда была Windows 7.)

Комментарии (1)

В моем случае я выполняю taskkill / f / im dongleserver.exe, где dongleserver.exe - это exe-файл моей программы.

Тогда я уже смогу переустановить свою программу.

Комментарии (0)

В моем случае это было вызвано необработанным исключением при создании источника eventLog. Используйте попытку поймать, чтобы указать причину.

Комментарии (0)

Закрытие каждого окна, которое было открыто в данный момент, с последующим запуском следующей команды решило проблему для меня:

taskkill /F /IM mmc.exe
Комментарии (0)

У меня была эта проблема, когда я использовал Application Verifier для проверки своего выигрышного сервиса. Даже после того, как я закрыл App Ver, мой сервис был заблокирован от удаления. Только удаление сервиса из App Ver решило проблему, и сервис был удален сразу. Похоже, какой-то процесс все еще использует ваш сервис после того, как вы попытались удалить его.

Комментарии (0)

шаги для подражания:

step-1 goto местоположение C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319

step-2 команда запуска: installutil / u full-path / servicename.exe

шаг-3 закрыть панель служб и снова открыть ее

step-4 команда запуска: installutil full-path / servicename.exe

Комментарии (1)

Скорее всего, удаление сервиса не удается, потому что

protected override void OnStop()

ошибка броска при остановке сервиса. упаковка вещей в улов попытки предотвратит ошибку удаления метки

protected override void OnStop()
{
            try
            {
                //things to do
            }
            catch (Exception)
            {
            }

}

Комментарии (0)

Если шаги, предоставленные @MainMa, не сработали, выполните следующие действия

Шаг 1 Попробуйте убить процесс из диспетчера задач Windows или с помощью taskkill / F / PID < Service PID > . Вы можете найти pid процесса с помощью команды 'sc queryex < service name >'. Попробуйте следующий шаг, если вы все еще не можете удалить.

Шаг 2 Если выше

Запустите Autoruns для Windows Поиск службы по имени и результаты удаления.

Комментарии (0)

Основная причина ошибки - процесс не остановлен. Чтобы решить эту проблему, запустите диспетчер задач, перейдите в службы и посмотрите, сможете ли вы увидеть свой сервис, чем переходите к процессу этого сервиса и завершите процесс. Чем проблема будет решена полностью.

Комментарии (0)