603

如果服务文件不再存在,如何卸载 .NET Windows 服务?

我使用 InstallUtil 安装了一个 .NET Windows 服务。我已经删除了文件但忘记运行

 InstallUtil /u

第一的。因此该服务仍列在服务 MMC 中。

我必须进入注册表吗?或者,还有更好的方法?

4

15 回答 15

1185

你至少有三个选择。我已经按照使用偏好的顺序介绍了它们。

方法 1 - 您可以使用资源工具包中包含的SC 工具(Sc.exe)。(包含在 Windows 7/8 中)

打开命令提示符并输入

sc delete <service-name>

工具帮助片段如下:

DESCRIPTION:
        SC is a command line program used for communicating with the
        NT Service Controller and services.

delete----------Deletes a service (from the registry).

方法 2 - 使用 delserv

下载并使用 delserv 命令行实用程序。这是为 Windows 2000 开发的遗留工具。在当前的 Window XP 机器中,这已被方法 1 中描述的 sc 所取代。

方法 3 - 手动删除注册表项(注意这在 Windows 7/8 中适得其反)

Windows 服务在以下注册表项下注册。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services

在referred key下搜索服务名的子key,删除。(并且您可能需要重新启动才能从服务列表中完全删除该服务)

于 2008-10-13T15:14:12.770 回答
178

在命令提示符下,使用 Windows“sc.exe”实用程序。您将运行如下内容:

sc delete <service-name>
于 2008-10-13T15:00:42.767 回答
27

在 Windows 8 中使用“sc delete”的注意事项:

1) 使用提升的权限打开 CMD 窗口。[Windows Key-X 调出带有选项的菜单;选择“命令提示符(管理员)”。]
2)使用服务列表中的括号名称[例如,我使用“sc delete gupdate”,而在服务中,它显示为“Google 更新(gupdate)”]

于 2013-06-20T16:16:55.933 回答
24

有人提到sc delete作为答案。我就是这样做的,但是我花了一段时间才找到<service-name>参数。

该命令sc query type= service(注意,它的格式非常特殊,“服务”之前的空格是必需的)将输出已安装的 Windows 服务列表,并附上它们的限定名称以与sc delete <service-name>命令一起使用。

该列表很长,因此您可以考虑将输出通过管道传输到文本文件(即>> C:\test.txt),然后通过该文件进行搜索。

SERVICE_NAME是与sc delete <service-name>命令一起使用的。

于 2013-09-23T15:11:08.337 回答
13

通过注册表删除 Windows 服务

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

  1. 运行RegeditRegedt32

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

  3. 查找您要删除的服务并将其删除。您可以查看密钥以了解服务正在使用哪些文件并删除它们(如有必要)。

通过命令行窗口删除 Windows 服务

或者,您也可以使用命令提示符并使用以下命令删除服务:

sc 删除

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

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

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

于 2013-09-23T16:46:51.133 回答
11

如果你想使用一个工具,你可以使用Process Hacker

创建服务的表单:

流程黑客创建服务

服务上的上下文菜单以将其删除:

进程黑客删除服务

我发现 Process Hacker 是一个比 Windows 自己的 Taskmgr.exe 更方便管理 Windows 进程和服务的工具。特别是在 Windows XP 上,您根本无法从任务管理器访问服务。

于 2014-02-21T06:13:56.220 回答
5

我需要重新安装我的 tomcat 服务,这意味着首先删除它。这对我有用:

Start a command prompt window using run as administrator

sc query type= service >t.txt

(编辑文件t.txt,在列表中搜索找到tomcat服务。它叫Tomcat7)

sc delete Tomcat7

但是,第一次查询命令不起作用,因为 tomcat 服务没有运行。它似乎只列出正在运行的服务。我不得不启动服务并再次运行查询命令。

于 2014-06-16T07:55:37.193 回答
3

如果原来的 Service .InstallLog 和 .InstallState 文件还在文件夹中,您可以尝试重新安装可执行文件以替换文件,然后使用 InstallUtil /u,然后卸载程序。这有点令人费解,但对我来说在特定情况下有效。

于 2013-02-12T16:54:23.747 回答
3

您可以尝试运行Autoruns,这样您就不必手动编辑注册表。当您没有所需的权限时,这尤其有用。

于 2015-03-25T13:43:49.193 回答
0

您可以通过命令提示符卸载您的 Windows 服务,也只需编写这条命令

cd\                                                                   

cd C:\Windows\Microsoft.NET\Framework\v4.0.30319(or version in which you developed your service)                                           

installutil c:\\xxx.exe(physical path of your service) -d
于 2015-01-09T07:54:56.350 回答
0

第一步:移动到您的服务所在的目录

命令:cd c:\xxx\yyy\service

第二步:输入以下命令

命令:C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe service.exe \u

这里 service.exe 是您的服务 exe,\u 将卸载该服务。您将看到“卸载已完成”消息。

如果您想安装服务,请在上面的命令中删除 \u,这将安装您的服务

于 2015-12-15T20:39:34.220 回答
0

我们发现,即使您运行sc_delete,注册表中仍可能为您的服务保留一个条目,因此重新安装服务会导致一组损坏的注册表条目(它们不匹配)。我们所做的是regedit手动删除并删除此剩余条目。

注意:ShipmunkService 在 sc_delete 之后仍然出现!

然后您可以重新安装,您的服务将正常运行。祝大家好运,愿原力与你们同在。

于 2016-12-08T20:27:59.613 回答
0

-Windows+r打开cmd。

-sc YourSeviceName此代码删除您的服务。

-Uninstal "YourService Path"此代码卸载您的服务。

于 2018-02-27T06:42:47.210 回答
0

最简单的方法是使用Sys Internals Autoruns

在此处输入图像描述

以管理员模式启动它,然后您可以通过删除键删除过时的服务

于 2020-12-01T12:35:27.947 回答
0

很多很棒的答案,这真的帮助了我,但是缺少一件事。提到了通过 cmd 查找服务,sc query type= service但问题是我正在寻找的服务没有运行,并且此命令仅显示正在运行的服务(这可能是 OP 时不存在的新功能回答)。

您必须将服务的状态传递给这样的命令,sc query state= all或者sc query state= inactive 不需要传递 type= 服务,因为这是默认的

并且,如上所述,将其推送到文本文件中,以便更容易搜索sc query state= inactive > C:\servicesStopped.txt

来源:https ://docs.microsoft.com/en-us/windows-server/administration/windows-commands/sc-query

于 2022-01-07T19:16:18.313 回答