Блокировка базы данных SCM
октября 12 2009 by admin in СлужбыПри внесении изменений в службы из БД SCM вам, возможно, потребуется временно остановить запуск других служб, заблокировав SCM. Отличный момент для блокировки — перед запросом конфигурации службы и ее изменением. Кроме того, блокировка может пригодиться, если ваша служба зависит от других служб. Чтобы запретить SCM запускать службы, нужно выполнить функцию LockServiceDatabase, передав ей описатель, полученный от функции OpenSCMManager, при вызове которой был указан доступ SC_MANAGER_LOCK:
SC_L0CK LockServiceDatabase(SC..HANDLE hSCManager);
LockServiceDatabase возвращает идентификатор блокировки. Его надо сохранить, так как он понадобится для вызова снимающей блокировку функции UnlockServiceDatabase.
В каждый момент времени блокировать БД SCM может только один процесс, и, естественно, такая блокировка должна быть как можно короче. Если процесс, заблокировавший SCM, завершился, блокировка снимается автоматически, и службы могут запускаться снова.