Помимо того, что StingyJack отметил, что версии файлов отличаются, у вас есть еще одна проблема. Из документации VS (извините, не в сети)
Если вы установили и установить и
удалить пользовательские действия в
проект установки приложения, и вы
включили
Свойство RemovePreviousVersions в
Visual Studio 2005, предыдущая
версия продукта удалена
во время обновления. Тем не менее, это
поведение изменилось в Visual Studio 2008
следующим образом:
В Visual Studio 2005 пользовательский
Действия были названы следующим образом на
обновление с версии 1.0.0 до версии 1.0.1:
v1.0.0 настраиваемое действие Uninstall ()
v1.0.1 настраиваемое действие Install ()
В Visual Studio 2008 удаление
Действие не вызывается, как следует:
v1.0.1 настраиваемое действие Install ()
Если вы создали пользовательские действия, полагаясь
на старое поведение, вам нужно
изменить ваш код для нового поведения.
Это изменение поведения влияет только на
обновления, а не удаления.
Таким образом, вы устанавливаете службу, используя настраиваемое действие, но при обновлении часть «Деинсталляция» не вызывается так, как вы ожидаете, и вы пытаетесь установить поверх существующей работающей версии.
Я думаю , что когда он запрашивает перезагрузку, это потому, что он не может обновить файл служб во время работы.
Два варианта: -
Добавьте код в пользовательское действие Install / Commit для остановки службы, дождитесь, пока установщик заменит файлы служб, а затем перезапустите службу. Смотрите PonalSuper3 ответ в этой теме
Верните поведение VS2008 обратно к тому, как оно работало в VS2005 (настраиваемое действие удаления старых версий вызывается перед установкой новой версии) с помощью Orca, чтобы изменить InstallExecuteSequence.RemoveExistingProducts на наличие сразу после .InstallInitialize. - обычно вы устанавливаете .RemoveExistingProducts на 1525, но проверяете свой индивидуальный MSI.
Я добавил сценарий, который вы можете добавить в процесс сборки, чтобы изменить MSI InstallExecuteSequence