如何在Windows中删除服务?

548

我有几个旧的服务需要完全卸载,该如何操作?

14个回答

1021
使用SC命令,就像这样(您需要在命令提示符下执行此帖子中的命令):
SC STOP shortservicename
SC DELETE shortservicename

注意:您需要以管理员身份运行命令提示符,不仅要以管理员身份登录,还要具有管理员权限。如果您在上面遇到没有足够访问权限停止和/或删除服务的错误,请以管理员身份运行命令提示符。您可以通过在开始菜单中搜索命令提示符,然后右键单击并选择“以管理员身份运行”来实现这一点。PowerShell用户请注意:`sc`被别名为`set-content`。因此,`sc delete service`实际上会创建一个名为`delete`内容为`service`的文件。要在PowerShell中执行此操作,请改用`sc.exe delete service`。
如果您需要找到服务的简短服务名称,请使用以下命令生成一个包含服务列表及其状态的文本文件:
SC QUERY state= all >"C:\Service List.txt"

要获取更简洁的列表,请执行以下命令:
SC QUERY state= all | FIND "_NAME"

短服务名称将显示在显示名称的上方,如下所示:
SERVICE_NAME: MyService
DISPLAY_NAME: My Special Service

如果您想确保使用正确的名称,可以运行:

SC QUERY MyService

如果名称正确,它将显示相关信息;否则将出现错误。
因此,要删除该服务:
SC STOP MyService
SC DELETE MyService

5
删除SSDP Discovery服务?它用于检测和配置本地网络上的UPnP设备,您不应该删除它。这只是作为一个例子使用的。 - Lasse V. Karlsen
5
哦,我明白了,是的。我以为你是说不建议删除服务。谢谢你的回答! - sgwill
20
我不知道有多少系统管理员因为这个回答而意外删除了他们的SSDPSRV服务 :p - Vincent Vancalbergh
7
使用sc query state=all可获取完整的服务列表,基本的sc query命令不会返回未激活(也称为禁用)的服务。 - tricasse
52
请注意,如果您在使用PowerShell,则scset-content的别名。因此,执行sc delete service实际上会创建一个名为delete且内容为service的文件。要在PowerShell中执行此操作,请改用sc.exe delete service - KFL
显示剩余10条评论

74

点击 开始 | 运行 并在打开的栏目中输入 regedit。 点击确定。

导航到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services

在左侧窗格向下滚动,找到服务名称,右键单击它并选择 删除

重新启动系统。


3
当托管服务的可执行文件已被删除(未卸载),而首选的“sc delete”机制失败时,这是一个很好的备选方案。谢谢。 - holtavolt
感谢添加重新启动系统功能。我创建了一个服务,其中一个参数的路径有误,导致它无法正常启动,所以我将其删除,修复了路径后尝试重新创建,但却收到了服务已标记为删除的错误提示。 - Mike Devenney

41

如上所述,我执行了:

sc delete ServiceName

然而,由于我是在PowerShell中运行它,因此这并没有起作用。

在使用PowerShell时,您必须指定完整路径到sc.exe,因为PowerShell为sc分配了默认别名,并将其分配给Set-Content。既然它是一个有效的命令,它实际上并不显示错误消息。

为了解决这个问题,我执行了以下命令:

C:\Windows\System32\sc.exe delete ServiceName

4
你提供了这个额外的信息,为我节省了时间和精力。非常感谢你! :) - Kamil Stadryniak
我必须以管理员身份启动PowerShell。 - hbourchi

28

使用 services.msc 或 (开始 > 控制面板 > 管理工具 > 服务) 找到相关服务。双击查看服务名称和可执行文件的路径。

检查可执行文件版本信息,以了解服务所有者,并尽可能使用“添加/删除程序”进行干净卸载。

如果无法卸载,可以尝试从命令提示符中操作:

sc stop servicexyz
sc delete servicexyz

不需要重新启动。


4
请注意,如果服务名称中有空格,则必须将完整名称用引号括起来 - 如 sc delete "Amazon Assistant Service" - Jan 'splite' K.

23
SC DELETE "service name"

以管理员身份在cmd中运行命令,否则你将会遇到以下错误:

openservice failed 5 access is denied


此命令适用于Win10。 - Dash

10
如果您的操作系统为Windows Vista或更高版本,请以管理员身份在命令提示符下运行此命令:
sc delete [your service name as shown in service.msc e.g moneytransfer]
例如:sc delete moneytransfer 删除文件夹C:\Program Files\BBRTL\moneytransfer\ 查找moneytransfer注册表键并将其删除:
 HKEY_CLASSES_ROOT\Installer\Products\
 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\
 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\EventLog\
 HKEY_LOCAL_MACHINE\System\CurrentControlSet002\Services\
 HKEY_LOCAL_MACHINE\System\CurrentControlSet002\Services\EventLog\
 HKEY_LOCAL_MACHINE\Software\Classes\Installer\Assemblies\ [remove .exe references]
 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\Folders

这些步骤已在Windows XP、Windows 7、Windows Vista、Windows Server 2003和Windows Server 2008上进行过测试。


9

我们可以用两种不同的方式来完成它

通过注册表删除Windows服务

如果您知道正确的路径,从注册表中删除服务非常容易。我是这样做的:

  1. 运行RegeditRegedt32

  2. 转到注册表项 "HKEY_LOCAL_MACHINE / SYSTEM / CurrentControlSet / Services"

  3. 查找要删除的服务并将其删除。您可以查看键以了解服务正在使用的文件,并在必要时将其删除。

通过命令窗口删除Windows服务

另外,您还可以使用命令提示符,并使用以下命令删除服务:

sc delete

您还可以使用以下命令创建服务

sc create“MorganTechService”binpath=“C:\Program Files\MorganTechSPace\myservice.exe”

注意:您可能需要重新启动系统才能在服务管理器中更新列表。


6
注册表编辑方法对我无效。当我刷新服务管理器时,仍然显示该服务,但出现错误提示无法显示描述。 - datguy
2
注意:您可能需要重新启动系统才能在服务管理器中更新列表。 - Kevin M
2
也许是这样,但这使得 regedit 方法比不需要重新启动的 SC 命令方法更劣。 - datguy
4
这让我的服务出了问题 :( 请不要误导我。这个愚蠢的谷歌自动在它的搜索页面显示这个答案,我信任它并盲目地跟随它,没有点击 SOF 链接,结果不得不重新安装系统。 - Anand Rockzz
感谢注册表方法。这是在叛逆的机器上唯一能做到的方式。 - frostymarvelous
显示剩余3条评论

6
如果它们是由.NET创建的服务,您可以使用installutil.exe并带有/u开关,在.NET框架文件夹中,例如C:\Windows\Microsoft.NET\Framework64\v2.0.50727。

5

以下步骤解决了我在Windows 10上的问题:

  • 以管理员身份启动cmd.exe
  • 运行 SC DELETE "com.docker.service"
  • 重新安装docker

2
这里有一份传给我的vbs脚本:
```

以下是VBS脚本:

```
Set servicelist = GetObject("winmgmts:").InstancesOf ("Win32_Service")

for each service in servicelist
    sname = lcase(service.name)
    If sname = "NameOfMyService" Then 
        msgbox(sname)
        service.delete ' the internal name of your service
    end if
next

可能应该使用 nameofmyservice,而不是 NameOfMyService,因为前一行中 sname 是全部小写的。 - Dominik George

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接