Проблема остановки службы Windows из класса установщика. События происходят слишком поздно - PullRequest
3 голосов
/ 14 марта 2011

Я использую 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, если это возможно.

1 Ответ

6 голосов
/ 14 марта 2011

Сообщение о повторной попытке отображается в диалоговом окне установщика FilesInUse.Во время действия InstallValidate установщик Windows автоматически обнаруживает используемые файлы и запрашивает их у пользователя.

Решение состоит в том, чтобы остановить (без удаления) службу перед действием InstallValidate.Это можно сделать с помощью специального действия.

Обратите внимание, что вы не можете установить настраиваемое действие до InstallValidate с Visual Studio.Однако вы можете отредактировать MSI с помощью Orca после его создания и изменить последовательность действий в таблице InstallExecuteSequence.

Большинство коммерческих инструментов создания настроек и WiX поддерживают настраиваемые последовательности для ваших действий.

...