Я пытаюсь удалить службу Windows с sc delete <service name>
, и сталкиваюсь со следующей ошибкой:
[SC] DeleteService FAILED 1072:
Указанный сервис был помечен для удаления.
Что я уже сделал:
Остановил сервис, очевидно. Это
sc queryex "<service name>"
дает следующий результат:SERVICE_NAME: Stub service TYPE : 10 WIN32_OWN_PROCESS STATE : 1 STOPPED WIN32_EXIT_CODE : 1067 (0x42b) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x0 PID : 0 FLAGS :
Убедитесь, что консоль управления Microsoft закрыта (
taskkill /F /IM mmc.exe
),Удален ключ HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ <имя службы> из реестра .
Из-за этого удаления по-
services.msc
прежнему отображается служба (с именем, но без статуса или типа запуска), но описание «Не удалось прочитать описание. Код ошибки: 2> ». При попытке просмотреть свойства: «Система не может найти указанный файл». показано пять раз.
Проблема сохраняется.
Какой следующий шаг?
источник
Ответы:
Может быть несколько причин, из-за которых служба застревает в «пометке для удаления».
SysInternals 'Process Explorer открыт . Закрытие должно привести к автоматическому удалению сервиса.
Диспетчер задач открыт .
Консоль управления Microsoft (MMC) открыта . Чтобы убедиться, что все экземпляры закрыты, запустите
taskkill /F /IM mmc.exe
.Сервисная консоль открыта . Это то же самое, что и предыдущий пункт, поскольку консоль служб размещается в MMC.
Просмотр событий открыт . Опять же, это то же самое, что и третий пункт.
Ключ HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ {имя службы} существует .
Кто-то еще вошел на сервер и открыл одно из ранее упомянутых приложений.
Экземпляр Visual Studio, используемый для отладки службы , открыт.
источник
Это также может быть вызвано, если оставить консоль служб открытой. Windows фактически не удалит сервис, пока он не будет закрыт.
источник
У меня была такая же проблема, наконец я решаю убить процесс обслуживания.
для этого попробуйте следующие шаги:
получить идентификатор процесса службы с
sc queryex <service name>
убить процесс с
taskkill /F /PID <Service PID>
источник
В моем случае это сработало после закрытия
Services
. ПроверьтеServices.msc
, открыт ли он, если да, закройте его и проверьте, есть ли процесс обслуживания вTask Manager
.источник
Это означает, что сервис все еще указан как отключенный в services.msc. Просто закройте services.msc и снова откройте как администратор ... Служба не будет указана. Теперь установите сервис, используя команду,
installutil "путь обслуживания"
источник
Удаление ключей реестра, как было предложено выше, застряло у моей службы в состоянии остановки. Следующая процедура работала для меня:
Откройте диспетчер задач> выберите вкладку службы> выберите службу> щелкните правой кнопкой мыши и выберите «Перейти к процессу»> щелкните правой кнопкой мыши по процессу и выберите Завершить процесс
Служба должна исчезнуть после этого
источник
Обнаружил еще одну вещь, которую нужно проверить - посмотрите в диспетчере задач - если другие пользователи подключены к этому полю, даже если они «отключены», вы должны фактически выйти из них, чтобы сервис окончательно удалился.
источник
Похоже, что в версиях Windows, более поздних, чем Windows 7 (не проверенных, но по опыту последних версий Windows Server 2012 R2), диспетчер управления службами (SCM) является более строгим.
Хотя в Windows 7 он просто порождает другой процесс, он теперь проверяет, все ли запущен сервисный процесс, и может вернуть ERROR_SERVICE_MARKED_FOR_DELETE (1072) для любого последующего вызова CreateService / DeleteService, даже если служба кажется остановленной.
Я говорю здесь о коде Windows API, но хочу четко обозначить, что происходит, поэтому эта последовательность может привести к указанной ошибке:
Причина, по которой сервисный процесс все еще существует после того, как он уже сообщил о своем состоянии SERVICE_STOPPED, не удивительна. Это обычный процесс, основной поток которого «застрял» в своем вызове
StartServiceCtrlDispatcher
API, поэтому он сначала реагирует на действие управления остановкой, но затем должен выполнить оставшуюся последовательность кода.К сожалению, SCM / OS не справляется с этим должным образом. Программное решение довольно простое и точное: получите дескриптор процесса исполняемого файла службы перед тем, как остановить сервис, затем дождитесь, пока этот дескриптор станет сигнальным.
Если подходить к проблеме с точки зрения системного администрирования, решение также состоит в том, чтобы дождаться полного исчезновения процесса обслуживания.
источник
Вот что сработало для меня: - Я столкнулся с той же проблемой: мой сервис застрял в «помечены для удаления». - Я открыл services.msc Мой сервис обнаружился как работающий, хотя он уже был удален. - Я нажал «Стоп получил сообщение об ошибке», сказав, что служба не находится в состоянии приема контрольных сообщений. Тем не менее, служба была остановлена. - Закрытые сервисы .msc. - вновь открытые услуги .msc. - Сервис пропал (больше не отображается в списке сервисов).
(Среда была Windows 7.)
источник
В моем случае я выполняю
taskkill /f /im dongleserver.exe
, гдеdongleserver.exe
находится исполняемый файл моей программы.Тогда я могу переустановить свою программу уже.
источник
В моем случае это было вызвано необработанным исключением при создании исходного кода eventLog. Используйте try catch, чтобы определить причину.
источник
Закрытие каждого окна, которое было открыто в данный момент, с последующим запуском следующей команды решило проблему для меня:
источник
Закрытие консоли служб, как было предложено в нескольких ответах, позволило мне удалить службу. В моем сценарии это было только кратковременное исправление, так как все последующие переустановки и удаление службы потребовали бы от меня дополнительных действий. Просматривая мой файл web.config, я обнаружил, что однажды исправленная ошибка позволила мне легко удалить службу без дополнительного закрытия шага консоли служб.
источник
Это работает для меня.
Дерево завершения процесса завершит процесс и все процессы, созданные процессом.
Затем вы можете переустановить службу.
источник
В моем случае имя службы было «Монитор», которое также используется службой Windows под названием «Монитор». Когда я пытался обновить свои службы, я пытался удалить их, программа установки пыталась удалить службу Windows «Монитор», которую она не смог, и установка всегда откатывалась.
Я переименовал свой сервис в другое
источник
Если действия, предоставленные @MainMa, не сработали, выполните следующие действия.
Шаг 1 Попробуйте убить процесс из диспетчера задач Windows или с помощью taskkill / F / PID. Вы можете найти pid процесса с помощью команды «sc queryex». Попробуйте следующий шаг, если вы все еще не можете удалить.
Шаг 2 Если выше
Запустите автозапуск для Windows. Найдите сервис по имени и удалите результаты.
источник
Основная причина ошибки - процесс не остановлен. чтобы разрешить его, запустите диспетчер задач, перейдите в службы и посмотрите, можете ли вы по-прежнему видеть свою службу, чем перейти к процессу этой службы и завершить процесс. Чем проблема будет решена полностью.
источник
У меня возникла эта проблема, когда я использовал Application Verifier для проверки моей службы win. Даже после того, как я закрыл App Ver, мой сервис был заблокирован от удаления. Только удаление службы из App Ver решило проблему, и служба была удалена сразу. Похоже, какой-то процесс все еще использует ваш сервис после того, как вы попытались удалить его.
источник
шаги, чтобы следовать:
шаг-1 перейдите в папку C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319
шаг-2 запустите команду: installutil / u полный путь / servicename.exe
шаг 3 закройте панель служб и снова откройте ее
Шаг 4 Запустите команду: installutil full-path / servicename.exe
источник
Скорее всего, удаление службы завершается неудачно, потому что
выдает ошибку при остановке сервиса. оборачивание вещей в try catch предотвратит пометку об ошибке удаления
}
источник
Иногда это может происходить во время удаления службы с помощью сценария удаленного сеанса PowerShell, особенно когда вы пытаетесь удалить службу несколько раз. В этом случае попробуйте воссоздать сеанс перед удалением:
источник