3

Я запускаю свой веб-сервер в качестве веб-службы на Windows XP. Как это было сделано, описано здесь

Мой веб-сервер закодирован в ruby/sinatra, и я запускаю его C:\Ruby187\bin\ruby c:\web\web2.rb Этот код службы тоже. Вручную я останавливаю веб-сервер, нажимая CTRL+C в окне DOS, если он запускается из командной строки.

Я признаю, что мой код ruby не является «специально написанным программным обеспечением», чтобы быть сервисом. Но я хотел бы знать, могу ли я как-нибудь отключить его, когда я нажму кнопку «Стоп» для этой службы.

Как я могу остановить сервер сейчас, когда он запущен через службу? Я узнал, что могу остановить его с помощью taskkill /f /t /im ruby.exe

Можно ли каким-либо образом использовать функцию остановки службы MMC для остановки веб-сервера?


Я вызываю веб-сервер напрямую, как показано на картинке, нажмите здесь, чтобы прочитать текст на картинке.

1 ответ1

4

Кнопка Stop передает управление "Остановить службу" к основной программе сервиса - в данном случае это SrvAny. Остальное до этой программы. И кажется, что srvany просто проигнорирует контроль.

Кажется, что версия srvany для Windows NT 4.0 действительно убивает своих непосредственных потомков - вы можете получить ее от Microsoft.

Можно написать настоящую службу Windows, которая бы хорошо остановила вашу Ruby-программу - например, с помощью win32serviceutil Python. (К сожалению, нет никакого модуля Ruby для взаимодействия с Windows.)


Из командной строки или пакетных скриптов это будет сделано так же, как кнопка Стоп:

  • sc stop <name>

  • net stop <name>

Программно вам нужно вызвать OpenSCManager(...), OpenService(...), затем ControlService(..., SERVICE_CONTROL_STOP).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .