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

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

我使用InstallUtil安装了. net Windows服务。后来我删除了这些文件,但忘了运行

 InstallUtil /u

首先,所以服务仍然列在服务MMC中。

我要去登记吗?还是有更好的办法?

804168 次浏览

在命令提示符中,使用Windows的“;sc.exe"实用程序。你会运行这样的程序:

sc delete <service-name>

如果服务名有一个或多个空格,则用双引号括起来(h/t @geoffc):

sc delete "<service-name>"

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

方法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开发的遗留工具。在当前的windows XP盒子中,这被方法1中描述的sc所取代。

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

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

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services

在引用键下搜索具有服务名称的子键并删除它。(并且您可能需要重新启动才能从Services列表中完全删除该服务)

如果原来的Service . installlog和. installstate文件仍然在文件夹中,您可以尝试重新安装可执行文件以替换这些文件,然后使用InstallUtil /u,然后卸载程序。这有点复杂,但对我来说在一个特定的例子中是有效的。

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

1)以提升权限打开CMD窗口。[Windows Key-X弹出带有选项的菜单;选择“命令提示符(Admin)”.]
.使用实例 2)在服务中使用列表中的插入名称[例如,我使用“sc delete gupdate”,而在服务中,它读为“谷歌Update (gupdate)”) < / p >

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

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

这个列表相当长,所以您可以考虑将输出管道到一个文本文件(即>> C:\test.txt),然后搜索它。

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

通过注册表删除Windows服务

如果你知道正确的路径,很容易从注册表中删除服务。以下是我的做法:

  1. 执行注册表编辑器Regedt32命令

  2. 打开注册表项“HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services"

  3. 查找要删除的服务并删除它。您可以查看这些键来了解服务正在使用哪些文件,并在必要时删除它们。

通过命令窗口删除Windows服务

您也可以使用命令提示符删除服务,如下所示:

# EYZ0

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

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

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

如果你想使用工具,你可以使用过程的黑客

表单来创建服务:

Process Hacker Create Service

删除服务的上下文菜单:

进程黑客删除服务

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

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

Start a command prompt window using run as administrator


sc query type= service >t.txt

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

sc delete Tomcat7

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

你可以通过命令提示符卸载你的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

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

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

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

第二步:输入以下命令

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

这里service.exe是你的服务exe, \u将卸载服务。 你会看到"The uninstall has completed"的消息

如果你想安装一个服务,在上面的命令中删除\u将安装你的服务

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

. 注意:ShipmunkService在sc_delete之后仍然显示!< / p >

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

-Windows+r打开cmd。

-sc YourSeviceName这段代码删除你的服务。

-Uninstal "YourService Path"这段代码卸载你的服务。

最简单的方法是使用Sys Internals自动运行

enter image description here

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

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

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

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

来源:# EYZ0