Visual Studio 2005 -> 2008/10 Проблема обновления проекта установщика службы
Я обновил [MSV генератор проекта.vdproj, встроенный в VS2008] System.Configuration.Install.Installer с помощью ServiceProcessInstaller
и ServiceInstaller
с Visual Studio 2005 по 2008 год. Нет никаких следствий настройки для класса установщика (т. е. не пытаться запускать или останавливать службы или регистрировать дочерние элементы)
RemovePreviousVersions
установлен в true
и я меняю Version
а также ProductCode
, Это вызывает ошибку во время установки:
"ошибка 1001: указанная служба уже существует"
Поиск в Google дает вещи (но не на SO до сих пор):- Google для "Указанный сервис уже существует"
Самым полезным из тех, что я видел на сегодняшний день, является http://forums.msdn.microsoft.com/en-US/winformssetup/thread/b2d1bd22-8499-454e-9cec-1e42c03e2557/ однако это не отвечает основному вопросу:-
Учитывая, что пользователь может выбрать либо:
а) место установки это то же самое
или б) место установки отличается
Каковы минимальные изменения кода, которые разумно сделать, чтобы гарантировать, что старый сервис будет удален, а новый установлен? Или есть что-то кроме изменения кода, необходимого для решения этой проблемы в базовом сценарии обновления v1.0.1 до v1.0.2 той же службы с тем же именем (т. Е. Подписывание)
(AIUI строгое именование вступает в игру только в том случае, если в старом инсталляторе есть значительный шаг удаления, которого нет в новом.)
Я создал новый установщик в VS 2008, и он не лучше.
Пока мой обходной путь - прекратить обновление Version
а также ProductCode
, заставляя пользователя вручную удалять, когда ему говорят, что у него уже установлена версия.
Дополнение благодаря исследованию Dirk Vollmar: хотя простейший взлом, который мог бы сработать, - это сказать "если шаг установки называется обновлением, сначала вызовите шаг удаления для службы", я хотел бы получить правильный, официально благословенный ответ! (например, как простой хак справляется, когда служба переименовывается во время обновления?)
2 ответа
Это должно ответить на ваш вопрос
Предоставляет ли ваша служба (настройка) настраиваемое действие для удаления службы?
Обновление означает, что ранее установленный продукт будет удален до установки нового продукта. Я думаю, что причина ошибки в том, что старый сервис не может быть удален.
Если ваша служба написана на.NET, вам может пригодиться эта статья: http://www.codeproject.com/KB/install/InstallService.aspx