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