Я использую Visual Studio 2010 с .NET 4.0.
У меня есть служба Windows, которая устанавливается из проекта установки Visual Studio. В проекте установки для свойства RemovePreviousVersion установлено значение True.
В проекте, который содержит службу, у меня есть класс установщика, который будет использоваться для остановки службы при обновлении с предыдущей версии.
Таким образом, при обновлении программного обеспечения служба уже существует и может быть запущена. Если он работает, то во время установки программа установки сообщит, что файл уже используется, и дает возможность повторить попытку, продолжить или выйти из установки. На этом этапе я мог остановить службу вручную и нажать «Попробовать еще раз», и это будет работать. Но я не хочу, чтобы конечный пользователь делал это.
Я поместил окна сообщений в класс установщика BeforeInstall, BeforeUninstall (события установщика), Install, Uninstall, Commit, Rollback (переопределенные методы), чтобы я мог видеть, когда они вызываются во время установки.
Когда запускается установка, подсказка о том, что файл используется, отображается перед любым кодом класса установщика. Как только я остановлю службу и нажму «повторить попытку», она продолжится, и отобразятся окна сообщений в классах установки. Так что класс установщика определенно вызывается, слишком поздно в процессе что-либо делать.
Я не думаю, что это было поведение в более ранних версиях .NET?
Кто-нибудь сталкивался с этой проблемой или есть предложения?
Я мог бы попробовать проект InstallShiled LE, который поставляется с Visual Studio 2010, если бы мне было нужно (не уверен, что это дало бы тот же результат), но я бы предпочел узнать, знает ли кто-нибудь решение с помощью проекта установки Visual Studio, если это возможно.