我使用 installUtil.exe 安装了 Windows 服务。
更新代码后,我再次使用 installUtil.exe 安装服务,无需先卸载原始版本。
当我现在尝试卸载服务时,installUtil.exe 成功完成卸载,但服务仍然出现。
如果我尝试更改其属性,我会收到消息“服务已标记为删除”。
如何强制删除(最好不重启服务器)?
我使用 installUtil.exe 安装了 Windows 服务。
更新代码后,我再次使用 installUtil.exe 安装服务,无需先卸载原始版本。
当我现在尝试卸载服务时,installUtil.exe 成功完成卸载,但服务仍然出现。
如果我尝试更改其属性,我会收到消息“服务已标记为删除”。
如何强制删除(最好不重启服务器)?
过去引起我注意的一件事是,如果您正在运行服务查看器,那么这会阻止服务被完全删除,因此请提前关闭
您不必重新启动机器。以提升模式启动 cmd 或 PowerShell。
sc.exe queryex <SERVICE_NAME>
然后你会得到一些信息。将显示一个 PID 编号。
taskkill /pid <SERVICE_PID> /f
其中 /f 是强制停止。
现在您可以安装或启动您的服务。
好吧,如果卸载不删除任何机会,您可以使用 SC.EXE 强制删除任何 Windows 服务。
sc delete <Service_Name>
阅读有关“MS Techno Blogging”的更多信息从服务 MMC 中强制删除服务
我知道这不会有帮助,但它可能会在未来帮助某人。
我刚刚遇到了同样的问题,关闭并重新打开服务管理器从注册表中删除了两个条目并完成了服务的卸载。
在此之前,刷新服务经理并没有帮助。
sc delete sericeName
只需确保在执行此操作之前停止服务即可。我大部分时间都看过这部作品。有时我看到 Windows 卡在某些东西上并且它坚持要重新启动。
这对我有用
$a = Get-WmiObject Win32_Service | Where-Object {$_.Name -eq 'psexesvc'}
$a.Delete()
如果打开,请关闭 cmd 和服务窗口,然后通过右键单击并选择以管理员身份运行再次启动 cmd。如果sc delete serviceName
不起作用或任何事情都不起作用。
不幸的是,您需要重新启动服务器。那应该删除“已删除”的服务。
以防万一这个答案对某人有帮助:如发现here ,您可能会为自己以管理员身份运行Sysinternals Autoruns省去很多麻烦。只需转到“服务”选项卡并删除您的服务。
它在我没有任何编辑注册表权限的机器上为我做了诀窍。
您可以手动删除位于 的服务的注册表项HKLM\SYSTEM\CurrentControlSet\Services
,之后您将不会在服务控制管理器中看到该服务(需要刷新或重新打开才能看到更改),并且您可以照常重新安装该服务。
还值得注意的是:
sc delete "ServiceName"
在 PowerShell 中不起作用,sc 是 PowerShell 中 cmdlet Set-Content 的别名。你需要做:
sc.exe delete "ServiceName"
这对我有用:
net stop "MyWindowsService"
taskkill /F /IM mmc.exe
sc delete "MyWindowsService"
以下将在不重新启动机器的情况下工作:
您是否尝试在调用卸载之前停止服务?我随机遇到了这个问题。有时我可以在不重新启动的情况下将其删除。我的猜测是它与仍在运行的服务有关
我迟到了,但想添加一个替代方案,这可能看起来很奇怪,但我没有看到另一种方式:
当我每晚在 CI 进程中安装我的 Windows 服务时,我需要一些可以一直工作并且完全自动化的东西。出于某种原因,这些服务在卸载后总是被标记为删除很长一段时间(5 分钟或更长时间)。因此,我扩展了重装批处理脚本,以确保该服务真的被删除(简化版):
REM Stop the service first
net stop My-Socket-Server
REM Same as installutil.exe, just implemented in the service
My.Socket.Server.exe /u
:loop1
REM Easy way to wait for 5 seconds
ping 192.0.2.2 -n 1 -w 5000 > nul
sc delete My-Socket-Server
echo %date% %time%: Trying to delete service.
if errorlevel 1072 goto :loop1
REM Just for output purposes, typically I get that the service does not exist
sc query My-Socket-Server
REM Installing the new service, same as installutil.exe but in code
My.Socket.Server.exe /i
REM Start the new service
net start My-Socket-Server
我可以看到,该服务被标记为删除大约 5 分钟(!),直到它最终通过。最后,我不需要任何手动干预。我将在未来扩展脚本,以便在特定时间后发生某些事情(例如 30 分钟后通知)。
如果您无法在服务中停止该服务,您可以在任务管理器中停止您的 windows 服务 exe 。之后,您可以删除该服务。
刷新服务列表总是对我有用。如果服务窗口是打开的,它会保存一些由于某种原因而存在的内存。F5,我又重新安装了!
还要确保没有任何可执行文件的实例仍然处于活动状态(无论出于何种原因,可能独立于服务而运行的实例)。
我正在打开和关闭 MMC 并寻找要杀死的 PID - 但是在查看进程资源管理器时,有几个现存的进程从一个被遗忘的预定批处理中运行。杀了他们。任务完成。
该主题有很多论坛问题。
我在 windows api 中找到了答案。卸载服务后无需重启电脑。您必须致电:
BOOL WINAPI CloseServiceHandle(
SC_HANDLE hSCObject
);
这将关闭服务的句柄。在 Windows 7 上,它解决了我的问题。我愿意:
当 TopShelf 出现问题或服务因其他原因失败时,我使用以下 PowerShell 从几个地方拼凑而成的 Octopus Deploy 实例。
$ServiceName = 'MyNaughtyService'
$ServiceName | Stop-Service -ErrorAction SilentlyContinue
# We tried nicely, now KILL!!!
$ServiceNamePID = Get-Service | Where { $_.Name -eq $ServiceName} # If it was hung($_.Status -eq 'StopPending' -or $_.Status -eq 'Stopping') -and
$ServicePID = (Get-WmiObject Win32_Service | Where {$_.Name -eq $ServiceNamePID.Name}).ProcessID
Stop-Process $ServicePID -Force