Итак, ситуация. У нас есть файловая база, опубликованная через web-сервер (в нашем случае Apache), с которой мы хотим работать из обновлятора.
Для некоторых операций (обновление, архивация) требуется монопольный доступ к базе и с этой задачей прекрасно справляется типовой механизм освобождения базы от пользователей и регламентных заданий.
Но если база файловая и используется веб-сервером - требуется его остановка на время работы с базой, требующей монопольного доступа. Сегодня я расскажу как это делать из обновлятора автоматически.
Для этого заходим в свойства нужной базы:
Настраиваем блокировку
Переходим на закладку "События"->"Перед блокировкой" и пишем сюда следующий скрипт:
Что я делаю? Я останавливаю службу по имени Apache2.4, запущенную на сетевом компьютере tezis (этот тот компьютер, на котором крутится веб-сервер Apache).
После этого я жду 10 секунд, чтобы быть уверенным, что служба точно остановилась.
Если обновлятор запускается на том же компьютере, что и веб-сервер - команда остановки службы будет проще:
net stop Apache2.4 ping 127.0.0.1 -n 10 > nul |
Настраиваем разблокировку
Для этого там же (в свойствах) переходим на закладку "После разблокировки" и пишем сюда скрипт для запуска службы, которую мы остановили при блокировке:
Если обновлятор запускается на том же компьютере, что и веб-сервер - команда запуска службы будет проще:
net start Apache2.4 ping 127.0.0.1 -n 10 > nul |
Проверяем в деле
Запустим архивацию, настроенной нами базы:
Видно, что в перед блокировкой базы служба Apache на компьютере с веб-сервером была остановлена.
Затем была осуществлена блокировка доступа к базе. Сделана архивная копия.
А в самом конце, после разблокировки доступа к базе, мы вновь запустили службу веб-сервера.
Возможные трудности
Если обновлятор запускается без прав администратора (а это нормальная ситуация, так обычно и делают) - на остановку и запуск службы веб-сервера может не хватить прав.
В этом случае вам может понадобиться дать пользователю разрешение на запуск и остановку служб. Вот инструкция: ссылка.
Спасибо одному из пользователей обновлятора - Андрей, спасибо - что разобрался с ситуацией и поделился решением.