如何解决“指定的服务已被标记为删除”错误

我尝试用sc delete <service name> Windows服务,并遇到以下错误:

[SC] DeleteService失败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 Management Console已closures ( taskkill /F /IM mmc.exe ),

  • 确保事件查看器已closures ,

  • 从registry中删除键HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ <服务名称> 。

    由于此删除, services.msc仍显示该服务(具有名称,但没有状态或启动types),但描述为“<读取失败说明。 错误代码:2>“。 试图查看属性时,“系统找不到指定的文件”显示五次。

问题依然存在。

你下一步怎么做?

可能有几个原因导致服务卡在“标记为删除”中。

  1. SysInternals的Process Explorer打开 。 closures它应该导致服务的自动删除。

  2. 任务pipe理器已打开 。

  3. Microsoftpipe理控制台(MMC)已打开 。 要确保closures所有实例,请运行taskkill /F /IM mmc.exe

  4. 服务控制台打开 。 这与以前的观点相同,因为服务控制台由MMC托pipe。

  5. 事件查看器已打开 。 再一次,这和第一点是一样的。

  6. 键HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ {服务名称}存在 。

  7. 其他人login到服务器,并有一个前面提到的应用程序打开。

  8. 打开用于debugging服务的Visual Studio实例。

这也可能是由于打开服务控制台造成的。 Windows将不会实际删除该服务,直到它被closures。

在我的情况下,它closuresServices后工作。 检查Services.msc是否打开,如果是,closures它并检查在Task Managerfind的任何服务进程。

嗨,大家好,我有同样的问题

最后,我决定杀死服务过程

因为它尝试下面的步骤

1-获得服务的ID

sc queryex <service name>

2千位与

taskkill / F / PID <Service PID>

如上所示删除registry项让我的服务停留在停止状态。 以下程序适用于我:

打开任务pipe理器>select服务选项卡>select服务>右键单击并select“去处理”>右键单击该进程并select结束进程

服务应该在此之后消失

在我的情况下,它是由创buildeventLog源时未处理的exception引起的。 使用try catch来指出原因。

发现另外一件事要检查 – 看看任务pipe理器 – 如果其他用户连接到这个盒子,即使他们是“断开”,你必须实际签署他们的服务,最终删除。

在我的情况下,我执行taskkill /f /im dongleserver.exe ,其中dongleserver.exe是我的程序的exe文件。

然后我可以重新安装我的程序了。

在Windows 7之后的版本(未经validation,但是由Windows Server 2012 R2的最新经验)看来,服务控制pipe理器(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状态之后,服务进程依然存在的原因并不奇怪。 这是一个常规的进程,其主线程在调用StartServiceCtrlDispatcher API时“卡住”,所以它首先对停止控制动作作出反应,但是必须执行其余的代码序列。

单片机/操作系统不能很好地处理这个问题,这是很不幸的。 程序化的解决scheme有点简单和准确:在停止服务之前获取服务可执行程序的进程句柄,然后等待此句柄变成信号。

如果从系统pipe理的angular度来解决这个问题,解决scheme也是等待服务过程完全消失。

这是对我有用的: – 我遇到了同样的问题:我的服务被卡在“标记为删除”。 – 我打开services.msc我的服务确实显示为正在运行,虽然它已经被卸载。 – 我点击停止接收到错误消息,说服务不处于接收控制消息的状态。 尽pipe如此,这项服务已经停止。 – closuresservices.msc。 – 重新打开services.msc。 – 服务不见了(不再显示在服务列表中)。

(环境是Windows 7)

closures当前打开的每个窗口,然后运行以下命令解决了我的问题:

 taskkill /F /IM mmc.exe 

如果@MainMa提供的步骤不起作用,请遵循以下步骤

步骤1尝试从Windows任务pipe理器或使用taskkill / F / PID查杀进程。 你可以通过命令“sc queryex”find进程的pid。 如果仍然无法卸载,请尝试下一步。

第2步如果以上

运行Windows的自动search按名称search服务并删除结果。

错误的主要原因是进程没有停止。 解决它启动任务pipe理器去服务,看看你是否仍然能够看到你的服务,比去那个服务和结束进程的过程。 比问题将完全解决。

我在使用Application Verifiervalidation我的win服务时遇到此问题。 即使我closures了应用程序版本我的服务被阻止删除。 只有从App Ver中删除服务解决了问题,并立即删除服务。 看起来像一些过程仍然使用您的服务后,你试图删除一个。