停止窗口服务时,停止选项为灰色

我已经创建了一个 Windows 服务,在控制面板中的服务-> 管理工具-> 服务中,它的状态正在启动。

我想停止这项服务,但停止选项是灰色的。 如何启动/停止服务?

每次我重新启动,它就会停止,然后我就可以删除它。

242758 次浏览

If you run the command:

sc queryex <service name>

where is the the name of the service, not the display name (spooler, not Print Spooler), at the cmd prompt it will return the PID of the process the service is running as. Take that PID and run

taskkill /F /PID <Service PID>

to force the PID to stop. Sometimes if the process hangs while stopping the GUI won't let you do anything with the service.

If the stop option is greyed out then your service did not indicate that it was accepting SERVICE_ACCEPT_STOP when it last called SetServiceStatus. If you're using .NET, then you need to set the CanStop property in ServiceBase.

Of course, if you're accepting stop requests, then you'd better make sure that your service can safely handle those requests, especially if your service is still progressing through its startup code.

You could do it in one line (useful for ci-environments):

taskkill /fi "Services eq SERVICE_NAME" /F

Filter -> Services -> ServiceName equals SERVICE_NAMES -> Force

Source: https://technet.microsoft.com/en-us/library/bb491009.aspx

Open command prompt with admin access and type the following commands there .

a)

tasklist

it displays list of all available services . There you can see the service you want to stop/start/restart . Remember PID value of the service you want to force stop.

b) Now type

taskkill /f /PID [PID value of the service]

and press enter. On success you will get the message “SUCCESS: The process with PID has been terminated”.

Ex : taskkill /f /PID 5088

This will forcibly kill the frozen service. You can now return to Server Manager and restart the service.

I solved the problem with the following steps:

  1. Open "services.msc" from command / Windows RUN.

  2. Find the service (which is greyed out).

  3. Double click on that service and go to the "Recovery" tab.

  4. Ensure that

    • First Failure action is selected as "Take No action".
    • Second Failure action is selected as "Take No action".
    • Subsequent Failures action is selected as "Take No action".

    and Press OK.

Now, the service will not try to restart and you can able to delete the greyed out service from services list (i.e. greyed out will be gone).

As Aaron mentioned above, some services do not accept SERVICE_ACCEPT_STOP messages, by the time it was developed. And that is hard coded into the executable. Period. A workaroud would be not to have it started, and as you cannot change its properties, forcibly do the following:

  1. Boot into safe mode (Windows 10 users might need msconfig > boot > safe boot)
  2. Regedit into HKLM > System > ControlSet001 > Services
  3. Locate your service entry
  4. Change 'Start' key to 3 (manual startup) or 4 (disabled)

If you cannot change the entry, right-click on your service name on the left pane, select 'Permissions', check that 'Everyone' has full access and try step 4 again.

Don't forget to disable safe boot from msconfig again, and reboot !

sc queryex <service name>
taskkill /F /PID <Service PID>

eg

enter image description here

eg

Here's a simple method to kill a service you can't stop directly, if that service has dependencies.

  1. Open the service's properties window & click on dependencies tab
  2. See what it needs to run
  3. Stop one of those if possible, being sure that it won't also crash Windows

For example, stopping "network store interface service" aka nsi will kill an unkillable dnscache service. It will also kill all network capabilities & may require restarting Windows to get them back. I've had to do this to edit the hosts file, sometimes dnscache refuses to let go & you can't update hosts without killing it first but you can't do it directly.

The crucial thing that a lot of the suggestions dont make clear is that you must 'start command window as administrator' even if your already logged in as an administrator.