O botão Stop envia um controle "Stop service" para o programa principal do serviço - neste caso, é srvany . O resto depende desse programa. E parece que srvany simplesmente ignorará o controle .
Parece que a versão do srvany para o Windows NT 4.0 faz matar seus filhos imediatos - você pode obtê-lo da Microsoft .
É possível escrever um serviço do Windows real que pare muito bem seu programa Ruby - por exemplo, usando win32serviceutil
do Python. (Não parece haver nenhum módulo Ruby para fazer interface com o Windows, infelizmente.)
Da linha de comando ou scripts em lote, isso fará o mesmo que o botão Parar:
-
sc stop <name>
-
net stop <name>
Programaticamente, você precisa ligar para OpenSCManager(...)
, OpenService(...)
, então ControlService(..., SERVICE_CONTROL_STOP)
.