Подтвердить что ты не робот

Установщик не перезапишет существующее приложение

У меня есть решение Visual Studio 2010 с 8 проектами. Он также имеет проект установки, который я создаю для создания установки.

Он отлично работает при первой установке на клиентский ПК. Тем не менее, я затем изменяю свой проект и создаю новую программу установки и передаю ее клиентам. Когда это произойдет, клиент должен сначала, вручную, удалить последнюю установку, а затем запустить настройку.

Если они запускают установку, без удаления, кажется, что она не перезаписывает существующие файлы (exe, а также DLL). Обычно это только exe, который модифицируется. Однако он не перезаписывает его. Версия на клиентской машине, похоже, остается прежней.

Есть ли способ заставить его перезаписать?

Обратите внимание, что когда я изменяю свой основной проект приложения, я перехожу к свойствам проекта, информации о сборке и увеличиваю версию сборки, а также версию файла.

4b9b3361

Ответ 1

Установщик визуальной студии не самый удобный для пользователя по сравнению с коммерческими продуктами или даже WiX, если вы после хорошего уровня контроля над вашей установкой.

Когда у вас есть проект установки Visual Studio, у вас есть несколько свойств, которые участвуют в процессе обновления

1) Код обновления - это связь между установщиками одного и того же файла, и вы не должны изменять этот код без необходимости

2) Номер версии - странно только первые 3 числа (major.minor.build) используются для сравнения (это распространенная ошибка, которую делает множество разработчиков)

3) Код продукта. Как только вы измените номер версии, VS предложит вам изменить этот номер - сделайте это - если вы автоматизируете смену номера, помните, чтобы сделать это также

4) DetectNewerInstalledVersion - установите значение True

5) RemovePreviousVersions - установить значение True

Лично я бы посмотрел на использование WiX для такой небольшой установки, то есть если вы можете сделать это в Visual Studio, то версия WiX

Мой установщик для OpenCover выглядит следующим образом

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" >

<Product Id="*" Name="OpenCover" Language="1033" Version="!(bind.FileVersion.OPENCOVER_FRAMEWORK_DLL)" 
        Manufacturer="OpenCover @ GitHub" UpgradeCode="2250c3f1-d9ba-44d8-b4db-25f91fe92dc6">

    <Package InstallerVersion="200" Compressed="yes" />

    <Upgrade Id="2250c3f1-d9ba-44d8-b4db-25f91fe92dc6">
        <UpgradeVersion OnlyDetect="no" Property="PREVIOUSFOUND" Minimum="1.0.0.0" IncludeMinimum="yes"
                        Maximum="!(bind.FileVersion.OPENCOVER_FRAMEWORK_DLL)" IncludeMaximum="no" />

        <UpgradeVersion OnlyDetect="yes" Property="NEWERFOUND" Minimum="!(bind.FileVersion.OPENCOVER_FRAMEWORK_DLL)"
                        IncludeMinimum="yes" />
    </Upgrade>

    <Media Id="1" Cabinet="media1.cab" EmbedCab="yes" />

...

</Wix>

Надеюсь, вы найдете полезную

Ответ 2

В свойствах проекта установки измените номера версии/сборки. Это предложит вам создать новый GUID. Выполнение этого сообщает установщику, что у вас есть новая версия, и она позволит автоматически удалить старую версию программы и установить новую систему MSI.

Ответ 3

Это старый пост, но добавьте это для людей, которые могут найти ответ.

Я столкнулся с этой проблемой даже после того, как после всего, что указано здесь, к письму. Моя проблема заключалась в том, что версия программы С# не будет увеличиваться при каждой сборке, независимо от того, что. Даже после того, как я вручную отредактировал AssemblyInfo.cs, сгенерированная версия exe все равно будет 1.0.0.0. В результате настройка не заменит файл.

Обходной путь заключается в добавлении условия запуска к "Первичному выходу из проекта XYZ" (или тому, что вы хотите перезаписать) node проекта установки. Это приводит к тому, что установщик удаляет файл при запуске новой установки. Теперь, когда пользователь запускает приложение, появляется окно, в котором говорится, что приложение настроено, новые файлы копируются в папку приложения и запускается приложение. Это простой проб и ошибок. Я не знаю, почему он работает таким образом (и мне нужен кофе, проведя всю ночь, пытаясь понять это:)).

  • Щелкните правой кнопкой мыши на своем проекте → View → Условия запуска
  • Щелкните правой кнопкой мыши "Требования к целевой машине" → Добавить условие запуска файла
  • A node ( "Поиск файла1" ) появится в разделе "Поиск целевой машины", а другой node ( "Условие1" ) появится в разделе "Условия запуска"
  • Нажмите "Поиск файла1" и измените его свойство FileName на то, что связано с существованием (например, "Notepad.exe", почти всегда)
  • Обратите внимание, что для "Папки" установлено значение "[SystemFolder]" и "Property" установлено значение "FILEEXISTS1"
  • Теперь нажмите "Первичный вывод" из проекта XYZ или любой другой node и в окне свойств установите "Условие" в "FILEEXISTS1" точно так, как он был указан выше.

Ответ 4

У меня также возникла проблема с обновлением .exe, хотя, следуя вышеприведенным шагам. Похоже, что версия продукта .exe автоматически не соответствует номеру версии, заданному в настройках. Чтобы заменить .exe при запуске новых инсталляторов, увеличьте версию продукта следующим образом:

1) Перейти к Свойствам проектa > Приложение > Информация о сборке...

2) Увеличьте номера версий сборки и файлов

3) Создайте настройку еще раз, и установка должна перезаписать старый .exe

Надеюсь, это поможет кому-то.

Ответ 5

У меня была та же проблема. Лучший способ убедиться в этом - убедиться, что ваш исполняемый файл, то есть сам Application.exe имеет более высокую версию, чем предыдущая.

Просто нажмите на свойства проекта (а не на проект установки) и установите версию приложения на более высокий.

Ответ 6

Немного изменив ответы, вы должны увеличить версию файла, чтобы заставить Windows Installer перезаписываться во время обновления. Это не обязательно то же самое, что увеличивать версию сборки, как указывали некоторые. Только версия файла требует увеличения, а с помощью управляемого кода вы делаете это с помощью AssemblyFileVersion. Версия файла по умолчанию имеет версию сборки, но AssemblyFileVersion позволяет вам различать их при наличии клиентских сборок, зависящих от конкретной AssemblyFileVersion.

Ответ 7

Были проблемы с файлами, которые не переписываются. Проверенные номера версий, коды продуктов/обновлений, все. Что, наконец, помогло мне, этот пост в MSDN. В частности, здесь, при использовании Orca, для изучения файла msi:

Я также изменил последовательность RemoveExistingProducts в таблице > InstallExecuteSequence с 6550 по 1525 (после InstallExecute до > InstallInitialize).

Не уверен, почему, но установщик, похоже, запускает удаление предыдущей версии после того, как она уже установила новую версию. Может быть, есть причина для этого, но изменение этого, казалось, было единственным способом заставить приложение обновиться.

Если кто-то еще сталкивается с этой проблемой, как в последнее время, надеюсь, что это обходное решение поможет.