Наш продукт позволяет устанавливать обновления через установщик MSI. Обновление состоит из нескольких файлов, которые необходимо скопировать на диск, и добавления записей базы данных, которые установщик добавляет, запустив несколько сценариев SQL.
Обновления могут быть (и обычно) устанавливаются, когда основной исполняемый файл открыт. В связи с этим мне нужен способ предотвращения доступа к определенной функции, требующей интенсивного использования базы данных, в процессе обновления.
Мои нынешние мысли:
- Установщик добавляет ключ реестра при запуске.
- Обновление установлено.
- В случае успеха или неудачи ключ реестра удаляется.
Тем временем приложение (написанное на C #) запрашивает наличие раздела реестра, отображая диалоговое окно с сообщением об ошибке, если оно установлено.
Это надежно? Я обеспокоен тем, что произойдет, если пользователь убьет установщик через диспетчер задач, тогда ключ реестра никогда не будет удален, и пользователь будет навсегда заблокирован из функции. Также не уверен насчет условий гонки, к которым может привести приведенное выше решение.
Какие-либо предложения о том, возможен ли этот подход или лучше?