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

Ars*_*nko 534 windows-services

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

[SC] DeleteService FAILED 1072:

指定的服务已标记为删除.

我已经做了什么:

问题依然存在.

你下一步怎么做?

Ars*_*nko 1153

导致服务陷入"标记为删除"的原因可能有多种.

  1. SysInternals的Process Explorer已打开.关闭它应该导致自动删除服务.

  2. 任务管理器已打开.

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

  4. 服务控制台已打开.这与前一点相同,因为服务控制台由MMC托管.

  5. 事件查看器已打开.同样,这与第三点相同.

  6. 密钥HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\{service name}存在.

  7. 其他人登录到服务器并打开了前面提到的应用程序之一.

  8. 用于调试服务的Visual Studio实例已打开.

  • 关闭服务控制台为我解决了这个问题!我的过程如下:*在VS2012 x64 Native Tools命令提示符*** - >***导航到带有服务exectuable的目录*** - >***installutil/u servicename.exe(卸载已过时service)*** - >***复制新建的服务exe*** - >***installutil servicename.exe(安装更新的服务)*.我通常可以立即卸载并重新安装,没有任何问题.直到我随机不能.关闭服务控制台解决了它.谢谢你的提示! (65认同)
  • 在我看来,Process Explorer是最重要的.我建议加粗和/或将其移到列表的顶部. (17认同)
  • 任务经理似乎也这样做.如下所述,保持服务控制台打开也可能导致这种情况. (8认同)
  • ...如果关闭所有这些仍然没有帮助,你仍然看到服务"标记为删除"做简单注销而不是完全重启.它帮了我几次. (4认同)
  • 一个常见的工作流程:您的恶意同事也登录到远程服务器,他们都有一些开放... (2认同)
  • 除此之外,我必须运行`sc stop"任务名称"`并等待错误消息,直到`sc delete`工作. (2认同)

小智 204

这也可以通过使服务控制台保持打开状态来实现.在关闭服务之前,Windows实际上不会删除该服务.

  • 在我的情况下,服务控制台是问题.一旦我关闭它并重新打开它,删除的服务就会消失. (23认同)
  • 正如我在问题中指出的那样,"Microsoft管理控制台在测试期间已关闭". (3认同)
  • 很难相信保持窗户打开的情况......谢谢! (3认同)
  • 你救了我的一天 (2认同)
  • 这句话在十年后仍然适用! (2认同)

小智 42

在我的情况下,它关闭后工作Services.检查是否Services.msc打开,如果是,请关闭它并检查是否有任何服务流程Task Manager.


Ali*_*dri 42

嗨伙计们我有同样的问题,最后我决定杀死服务流程.

尝试以下步骤:

  • 获取服务的进程ID

    sc queryex <service name>

  • 杀戮过程

    taskkill /F /PID <Service PID>

  • 我的PID是0所以我最好不要杀了它! (2认同)

Gat*_*ign 13

按照此处的一些答案的建议关闭服务控制台确实允许我删除该服务。在我的情况下,这只是一个短期修复,因为所有后续重新安装和删除服务都需要我采取这些额外的步骤。查看我的 web.config 文件,发现有一个错误一旦修复,我就可以轻松删除服务,而无需额外关闭服务控制台步骤。


Ame*_*aik 10

这意味着该服务仍然在services.msc中列为已禁用.只需关闭services.msc并以管理员身份重新打开...该服务将不会列出.现在,使用命令安装服务,

installutil"服务之路"

  • 我只需重新打开我的 services.msc,它就消失了。谢谢! (2认同)

小智 9

如上所述删除注册表项使我的服务陷入停止状态.以下程序对我有用:

打开任务管理器>选择服务选项卡>选择服务>右键单击并选择"转到流程">右键单击该流程并选择结束流程

之后服务应该消失


小智 7

发现还有一件事需要检查 - 查看任务管理器 - 如果其他用户连接到此框,即使他们"断开连接",您也必须实际签署它们以使服务最终删除.

  • 不必要.您只需确保每个人都退出Microsoft管理控制台(MMC)和服务控制面板. (4认同)

kla*_*ndl 6

似乎在Windows 7之后的Windows版本(未经验证,但根据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
Run Code Online (Sandbox Code Playgroud)

服务流程在已经报告其SERVICE_STOPPED状态之后仍然存在的原因并不令人惊讶.这是一个常规进程,其主要线程在其对StartServiceCtrlDispatcherAPI的调用中"卡住" ,因此它首先响应停止控制操作,但随后必须执行其剩余的代码序列.

有点不幸的是,SCM/OS没有为我们正确处理这个问题.程序化解决方案有点简单和准确:在停止服务之前获取服务可执行文件的进程句柄,然后等待此句柄发出信号.

如果从系统管理角度处理问题,解决方案也是等待服务进程完全消失.


bal*_*ntn 6

这对我有用: - 我遇到了同样的问题:我的服务陷入'标记为删除'. - 我打开了services.msc我的服务确实显示为正在运行,虽然它已经被卸载了. - 我点击停止收到错误消息,说该服务未处于接收控制消息的状态.然而,服务已经停止. - 封闭式服务.msc. - 重新开放的服务.msc. - 服务已经消失(不再显示在服务列表中).

(环境是Windows 7.)

  • Windows 2008在这里,我不得不关闭服务面板 (2认同)

小智 5

在我的情况下,我执行taskkill /f /im dongleserver.exe,dongleserver.exe我的程序的exe文件在哪里.

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


Tsh*_*dau 5

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

taskkill /F /IM mmc.exe
Run Code Online (Sandbox Code Playgroud)