ChatGPT解决这个技术问题 Extra ChatGPT

当系统上没有可执行文件时如何卸载 Windows 服务?

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

出现这种状态的原因可能是因为msi包中的一个问题没有正确移除服务,但是一旦服务处于这种状态,我该如何修复呢?


C
CodeNaked

通过在“管理员”命令提示符下运行以下命令,您应该能够使用 sc.exe(我认为它包含在 Windows 资源工具包中)卸载它:

sc.exe delete <service name>

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

您可以在 System 文件夹中找到 sc.exe,它需要管理员权限才能运行。 More information in this Microsoft KB article

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


它完全符合我的要求,并从注册表中删除了该服务。它不再显示在服务控制台中。谢谢!
我得到“访问被拒绝”。接下来做什么?
对于尝试在 PowerShell 中的方法 1 中执行命令的人,请注意:sc 不适用于与服务控制管理器通信。它是 Set-Content 命令。请改用 sc.exe。
如果您收到错误 1072,请确保您没有打开服务控制面板(请参阅 this other question
我收到以下错误。 [SC] OpenService FAILED 1060:指定的服务不作为已安装的服务存在。后来用power shell尝试了同样的方法,它可以工作!
C
Community

通过注册表删除 Windows 服务

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

运行 Regedit 或 Regedt32 转到注册表项“HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services” 查找要删除的服务并将其删除。您可以查看密钥以了解服务正在使用哪些文件并删除它们(如有必要)。

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

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

sc 删除

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

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

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


以注册表的方式安全吗?注册表方式的“最终结果”是否与sc delete的“最终结果”相同?
不,我只是尝试直接从 regedit 中删除服务。结果,现在我要删除的服务条目仍然在服务中,而它的描述显示:“<无法读取描述。错误代码:2>”
N
Nima Soroush

这是删除服务 foo 的 powershell 脚本

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

不错的脚本,感谢分享尼玛!
非常适合删除仅位于任务管理器中的服务选项卡上的服务,而不是位于 Services.msc 中的服务。不确定如果服务在两个位置都存在,它会做什么。
F
Fredou

found here

我刚刚在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

T
Thomas Bratt

我最喜欢的做法是使用 Sysinternals Autoruns 应用程序。只需选择服务并按删除。


为什么不简单地使用 sc delete
J
JoeRod

我会为此使用 PowerShell

Remove-Service -Name "TestService"

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/remove-service


仅适用于 PS6
我收到以下错误。 [SC] OpenService FAILED 1060:指定的服务不作为已安装的服务存在。后来尝试使用 power shell 进行 sc delete 并且它可以工作!感谢power shell的想法。
S
Samiksha

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


这是个好建议。如果这不起作用,他可能需要重新安装,运行 installutil -u,然后卸载
我们是否必须创建相同 exe 的副本或重命名任何其他文件才能正常工作?
@Samiksha,我以为他说他没有“可执行文件的副本”?