我尝试使用sc delete <service name>
删除Windows服务,并遇到以下错误:
[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 :
Ensured that Microsoft Management Console is closed(taskkill /F /IM mmc.exe
),
由于此删除,services.msc
仍显示服务(具有名称,但没有状态或启动类型),但描述为“&lt;无法读取描述”。错误代码:2&gt;“。尝试查看属性时,“系统找不到指定的文件。”会显示五次。
问题仍然存在。
下一步是什么?
答案 0 :(得分:1072)
可能有多种原因导致服务卡在“标记为删除”中。
SysInternals' Process Explorer is opened。关闭它应该导致自动删除服务。
Microsoft Management Console (MMC) is opened。要确保关闭所有实例,请运行taskkill /F /IM mmc.exe
。
Services console is opened。这与前一点相同,因为服务控制台由MMC托管。
Event Viewer is opened。同样,这与第三点相同。
The key HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\{service name} exists
Someone else is logged into the server并打开了之前提到的应用程序之一。
用于调试服务的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