Я создал установщик, который устанавливает службу Windows. Я использовал установщик по умолчанию для Visual Studio в VS 2010.Крючок перед установкой установщика InstallInstall - установщик Windows
Служба доступа и записи в файле базы данных (SQLite) присутствует в установочной папке.
Во время удаления, когда служба остановлена или запущена, служба деинсталлируется без каких-либо ошибок.
Но если программа установки перенесена с версии 1 на 2, а служба предыдущей версии запущена, тогда была показана ошибка «Файл запрашивается некоторыми приложениями. Попробуйте еще раз», поскольку предыдущая служба установки, обращающаяся к DB-файл.
Поэтому перед установкой новой версии мне необходимо остановить предыдущую версию. У меня есть специальный скрипт действий для управления установкой и удалением. Метод BeforeInstall
Я написал код, чтобы остановить службу, используя ServiceController
. Это может остановить обслуживание.
ServiceController service = новый ServiceController ("SERVICE_NAME");
если (! (Service.Status.Equals (ServiceControllerStatus.Stopped)))
{ service.Stop(); service.WaitForStatus (System.ServiceProcess.ServiceControllerStatus.Stopped); }
Но еще до того, BeforeInstall
метод установки копирует новые версии файлов, заменяющие мои предыдущие версии файлов.
У меня всегда такая же папка установки. Так что, если я пишу код для остановки службы в пользовательском действии BeforeInstall, он все равно будет вызывать ошибку, потому что файл DB, к которому обращается служба предыдущей версии, пытался удалить новую версию. Поэтому я получаю «к файлу обращается некоторое приложение. Повторите попытку ".
Так что мне нужен крючок еще до того, как установщик скопирует файлы в папку установки. Чтобы я мог остановить службу до того, как установщик попытается обновить файл Db.
Любая идея будет оценена по достоинству.