Я обновил проект генератора [.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: хотя простейший хак, который может работать, заключается в том, чтобы сказать "если вызывается шаг установки и его обновление, вызовите шаг удаления для сервис сначала", я хотел бы получить официально официально благословенный ответ! (например, как простой хак справляется, когда служба переименовывается во время обновления?)