Как я могу систематически завершать работу служб Windows по порядку?
У нас есть это приложение с открытым исходным кодом, которое имеет три (3) сервиса. Для целей этого вопроса давайте назовем их A, 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
Итак, как вы можете видеть, каждый стоп / старт должен ждать предыдущего, чтобы полностью завершиться, прежде чем двигаться дальше. И поскольку каждая служба может занять от нескольких секунд до нескольких минут, мы не можем использовать какие-либо временные уловки.
Предложения с благодарностью.
Спасибо!
1 ответ
Вы можете сделать это с помощью 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