Visual Studio 2005 -> 2008/10 Проблема обновления проекта установщика службы - PullRequest
13 голосов
/ 16 декабря 2008

Я обновил [MSI-проект [.vdproj, встроенный в VS2008] System.Configuration.Install.Installer, установив ServiceProcessInstaller и ServiceInstaller с Visual Studio 2005 до 2008. Никаких настроек для класс установщика (т. е. не пытается запустить или остановить службы или зарегистрировать дочерние элементы)

RemovePreviousVersions установлен на true, и я изменяю Version и ProductCode. Это вызывает ошибку во время установки:

"ошибка 1001: указанная служба уже существует"

Googling дает материал (но не до сих пор на 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, заставляя пользователя вручную удалять, когда ему говорят, что у него уже установлена ​​версия.

Дополнение благодаря divo's probing: Хотя самый простой взлом, который мог бы сработать, это сказать: «Если вызывается шаг установки и его обновление, сначала вызовите шаг удаления для службы», как правильный официально благословенный ответ! (например, как простой хак справляется, когда служба переименовывается во время обновления?)

Ответы [ 2 ]

5 голосов
1 голос
/ 16 декабря 2008

Предоставляет ли ваша служба (настройка) настраиваемое действие для удаления службы?

Обновление означает, что ранее установленный продукт будет удален до установки нового продукта. Я думаю, что причина ошибки в том, что старый сервис не может быть удален.

Если ваш сервис написан на .NET, вам может пригодиться эта статья: http://www.codeproject.com/KB/install/InstallService.aspx

...