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

时间:2013-12-13 08:20:42

标签: windows-services

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

  

[SC] DeleteService FAILED 1072:

     

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

我已经做过的事情:

问题仍然存在。

下一步是什么?

21 个答案:

答案 0 :(得分:1072)

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

  1. SysInternals' Process Explorer is opened。关闭它应该导致自动删除服务。

  2. Task Manager is opened

  3. Microsoft Management Console (MMC) is opened。要确保关闭所有实例,请运行taskkill /F /IM mmc.exe

  4. Services console is opened。这与前一点相同,因为服务控制台由MMC托管。

  5. Event Viewer is opened。同样,这与第三点相同。

  6. The key HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\{service name} exists

  7. Someone else is logged into the server并打开了之前提到的应用程序之一。

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

答案 1 :(得分:186)

这也可能是由于服务控制台处于打开状态而引起的。在关闭服务之前,Windows实际上不会删除该服务。

答案 2 :(得分:41)

就我而言,它在关闭Services之后起作用了。检查Services.msc是否已打开,如果是,请关闭它并检查Task Manager中是否有任何服务流程。

答案 3 :(得分:38)

大家好我有同样的问题,最后我决定终止服务流程。

尝试以下步骤:

  • 使用

    获取服务的进程ID

    sc queryex <service name>

  • 使用

    终止进程

    taskkill /F /PID <Service PID>

答案 4 :(得分:8)

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

安装服务

installutil&#34;服务路径&#34;

答案 5 :(得分:8)

如上所述删除注册表项会使我的服务陷入停止状态。以下程序适用于我:

打开任务管理器&gt;选择服务标签&gt;选择服务&gt;右键单击并选择“转到流程”&gt;右键单击该流程并选择结束流程

此后服务应该消失

答案 6 :(得分: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

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

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

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

答案 7 :(得分:6)

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

答案 8 :(得分:6)

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

(环境是Windows 7。)

答案 9 :(得分:6)

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

答案 10 :(得分:5)

就我而言,我执行from struct import * x = pack("B",122) assert 123 == x[0] + 1 , 其中taskkill /f /im dongleserver.exe是我程序的exe文件。

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

答案 11 :(得分:4)

在我的情况下,它是由创建eventLog源时的未处理异常引起的。使用try catch来确定原因。

答案 12 :(得分:3)

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

taskkill /F /IM mmc.exe

答案 13 :(得分:1)

在我的情况下,服务名称为“ Monitor”,它也被称为“ Monitor”的Windows服务使用,当我尝试更新服务时,我尝试将其卸载,安装程序尝试删除Windows服务“ Monitor” '不能,安装总是回滚。

我最终将服务重命名为其他内容

答案 14 :(得分:0)

错误的主要原因是流程未停止。 解决它启动任务管理器转到服务,看看你是否仍然能够看到你的服务,而不是去那个服务和结束过程的过程。这个问题将完全解决。

答案 15 :(得分:0)

当我使用Application Verifier来验证我的win服务时,我遇到了这个问题。即使在我关闭App Ver后,我的服务也被阻止删除。仅从App Ver中删除服务即可解决问题并立即删除服务。在尝试删除某个进程后,某些进程仍在使用您的服务。

答案 16 :(得分:0)

如果@MainMa提供的步骤不起作用,请按照以下步骤进行操作

步骤1尝试从Windows任务管理器或使用taskkill / F / PID终止进程。你可以通过命令'sc queryex'找到进程的pid。如果仍然无法卸载,请尝试下一步。

步骤2如果上面

运行Autoruns for Windows按名称搜索服务并删除结果。

答案 17 :(得分:0)

要遵循的步骤:

步骤1 转到位置C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319

step-2 运行命令:installutil / u full-path / servicename.exe

步骤3 关闭服务面板并重新打开

步骤4 运行命令:installutil full-path / servicename.exe

答案 18 :(得分:0)

很可能删除服务失败,因为

protected override void OnStop()

停止服务时引发错误。将内容包装在try catch中将防止标记为删除错误

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

}

答案 19 :(得分:0)

这对我有用。

  • 打开任务管理器
  • 选择服务标签
  • 选择有问题的服务
  • 右键单击并选择“转到详细信息”
  • 右键单击该服务,然后选择“结束进程树”

结束进程树将结束该进程以及该进程创建的所有进程。

然后,您可以重新安装该服务。

答案 20 :(得分:0)

有时候,在通过PowerShell远程会话脚本删除服务期间可能会发生这种情况,尤其是在您尝试多次删除服务时。在这种情况下,请尝试在删除之前重新创建会话:

Remove-PSSession -Session $session
$newSession = New-PSSession -ComputerName $Name  -Credential $creds -ErrorAction Stop
Enter-PSSession $newSession