如何在系统上没有可执行文件的情况下卸载Windows服务?

当系统中没有可执行文件时,如何卸载Windows服务? 我无法运行installutil -u因为系统上没有可执行文件。 我仍然可以在服务控制台中看到该服务的条目。

这种状态的原因可能是因为msi包中的一个问题,它不能正确删除服务,但是一旦服务处于这种状态,我该如何解决这个问题呢?

您应该能够使用sc.exe(我认为它包含在Windows Resource Kit中)通过在“pipe理员”命令提示符处运行以下命令来卸载它:

 sc.exe delete <service name> 

其中<service name>是您在服务pipe理控制台中看到的服务本身的名称,而不是exe。

您可以在System文件夹中findsc.exe,并且需要pipe理权限才能运行。 此Microsoft知识库文章中的更多信息 。

或者,您可以直接调用DeleteService() api。 这种方式稍微复杂一些,因为你需要通过OpenSCManager()等来获得服务控制pipe理器的句柄,但是另一方面,它可以让你更好地控制正在发生的事情。

通过registry删除Windows服务

如果你知道正确的path,它很容易从registry中删除服务。 这是我如何做到这一点:

  1. 运行RegeditRegedt32

  2. 转到registry项“HKEY_LOCAL_MACHINE / SYSTEM / CurrentControlSet / Services”

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

通过命令窗口删除Windows服务

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

sc删除

您也可以使用以下命令创build服务

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

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

在这里find

我只是尝试在Windows XP,它的工作

本地计算机:sc \\。 删除[服务名称]

  Deleting services in Windows Server 2003 We can use sc.exe in the Windows Server 2003 to control services, create services and delete services. Since some people thought they must directly modify the registry to delete a service, I would like to share how to use sc.exe to delete a service without directly modifying the registry so that decreased the possibility for system failures. To delete a service: Click “start“ - “run“, and then enter “cmd“ to open Microsoft Command Console. Enter command: sc servername delete servicename For instance, sc \\dc delete myservice (Note: In this example, dc is my Domain Controller Server name, which is not the local machine, myservice is the name of the service I want to delete on the DC server.) Below is the official help of all sc functions: DESCRIPTION: SC is a command line program used for communicating with the NT Service Controller and services. USAGE: sc 

我最喜欢的做法是使用Sysinternals Autoruns应用程序。 只需select服务,然后按删除。

这里是删除服务foo的powershell脚本

 $foo= Get-WmiObject -Class Win32_Service -Filter "Name='foo'" $foo.delete() 

创build相同服务的可执行文件的副本,并将其粘贴到现有服务的相同path上,然后卸载。