当停止选项变灰时停止Windows服务
我已经创build了一个Windows服务,并在控制面板 – >pipe理工具 – >服务的服务,其状态是开始。
我想停止这项服务,但是停止选项是灰色的。 我怎样才能开始/停止服务?
每次我重新启动,然后停止,我可以删除它。
如果你运行这个命令:
sc queryex <service name>
其中是服务的名称,而不是显示名称(假脱机程序,不是打印假脱机程序),在cmd提示符下,它将返回服务正在运行的进程的PID。 采取该PID并运行
taskkill /F /PID <Service PID>
强制PID停止。 有时如果进程挂起,而停止GUI不会让你做任何事情的服务。
你可以做到一行(对于ci环境有用):
taskkill /fi "Services eq SERVICE_NAME" /F
filter – >服务 – > ServiceName等于SERVICE_NAMES – >强制
来源: https : //technet.microsoft.com/en-us/library/bb491009.aspx
如果停止选项变灰,那么您的服务在上次调用SetServiceStatus
时并不表示它正在接受SERVICE_ACCEPT_STOP
。 如果您使用的是.NET,那么您需要在ServiceBase
设置CanStop
属性。
当然,如果您接受停止请求,那么您最好确保您的服务能够安全地处理这些请求,特别是如果您的服务仍在通过启动代码进行的话。
使用任务pipe理器查找服务,并使用结束任务从那里杀死它。 总是为我做的伎俩。
如果您自己提供了服务,请考虑从OnStart事件中删除长时间运行的操作,通常这会导致服务无法响应。
用pipe理员权限打开命令提示符并在其中键入以下命令。
一个)
tasklist
它显示所有可用服务的列表。 在那里你可以看到你想停止/开始/重新启动的服务。 记住要强制停止的服务的PID值。
b)现在input
taskkill /f /PID [PID value of the service]
然后按回车。 成功之后,您将看到“成功:PID过程已终止”的消息。
Ex : taskkill /f /PID 5088
这将强行杀死冻结的服务。 您现在可以返回到服务器pipe理器并重新启动服务。
正如Aaron上面提到的,一些服务在开发之前不接受SERVICE_ACCEPT_STOP
消息。 这是硬编码到可执行文件。 期。 一个workaroud将不会开始,因为你不能改变它的属性,强制执行以下操作:
- 启动到安全模式(Windows 10用户可能需要msconfig> boot>安全启动)
- 注册到HKLM>系统> ControlSet001>服务
- find您的服务条目
- 将“开始”键更改为3(手动启动)或4(禁用)
如果无法更改条目,请右键单击左侧窗格中的服务名称,select“权限”,检查“每个人”是否具有完全访问权限,然后再次尝试第4步。
不要忘记从msconfig再次禁用安全启动,并重新启动!
我有同样的问题。 如果您不是计算机上的pipe理员,则需要以pipe理员身份运行“服务”。
我通过以下步骤解决了问题:
-
从命令/ Windows RUN打开“services.msc”。
-
find服务(灰色)。
-
双击该服务并转到“恢复”选项卡。
-
确保这件事
- 第一次失败行为被选为“不采取行动”。
- 第二次失败行动被选为“不采取行动”。
- 后续失败行动被选为“不采取行动”。
然后按OK。
现在,服务不会尝试重新启动,您可以从服务列表中删除灰色的服务(即灰色将不再显示)。