Назад | Перейти на главную страницу

Как я могу систематически выключать службы Windows по порядку?

У нас есть это приложение с открытым исходным кодом, в котором есть три (3) сервиса. Для этого вопроса назовем их А, B, и C.

Теперь их нужно отключать в определенном порядке. Этот порядок будет A, затем B, затем C.

Если B выключается раньше A, мы сталкиваемся со всевозможными проблемами. То же самое верно, если C завершает работу до B или A. Кроме того, для каждой службы может потребоваться разное время для завершения из-за того, сколько пользователей ее использовали.

О, это нужно заключить в пакетный файл DOS или что-то, что нетехнический пользователь может просто дважды щелкнуть, чтобы запустить. (PowerShell не исключен, но я никогда не использовал его). Кроме того, я программист на C #, так что его тоже можно использовать.

В любом случае, при запуске перезапуска должно произойти следующее:

1) Initiate shutdown of service A
2) When service A is down, it should trigger the shutdown of service B
3) When service B is down, it should trigger the shutdown of service C
4) When service C is down, it should trigger the START UP of service A
5) When service A is UP, it should trigger the START UP of service B
6) When service B is UP, it should trigger the START UP of service C

Итак, как вы можете видеть, каждая остановка / запуск требует полного завершения предыдущей, прежде чем двигаться дальше. А поскольку каждая служба может занять от нескольких секунд до нескольких минут, мы не можем использовать какие-либо временные уловки.

Предложения очень признательны.

Спасибо!

Вы можете сделать это с помощью PowerShell. Чтобы остановить службу, вы используете команду Stop-Service. Запуск службы осуществляется командой Start-Service. Итак, вы можете создать сценарий, в котором было бы несколько записей, подобных приведенной ниже, для каждой службы, которую необходимо остановить, в следующем порядке:

Stop-Service ServiceA
do { Start-Sleep -Milliseconds 200}
until ((get-service ServiceA).status -eq 'Stopped')

и для запуска сервисов:

Start-Service ServiceA
do { Start-Sleep -Milliseconds 200}
until ((get-service ServiceA).status -eq 'Running')

Затем вы можете объединить 6 этих блоков кода в сценарий, сохранить его как файл .ps1 и запустить из командной строки PowerShell следующим образом:

PS C:\> C:\Path\To\Script\script.ps1