Visual Studio 2010 - RemovePreviousVersions

У меня есть проект развертывания Visual Studio 2010 со следующими настройками:

DetectNewerInstalledVersion = True
InstallAllUsers = True
RemovePreviousVersions = True

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

Как я могу заставить проект установки полностью удалить существующие файлы (или, по крайней мере, перезаписать все новые файлы)?

Возможно, мне нужно написать сценарий удаления в установщике (может ли кто-нибудь связать меня с этим, я не могу найти)

Я посмотрел вокруг и на любые существующие вопросы, и все они говорят «увеличивайте количество версий файлов», однако для меня в настоящее время это не вариант.


person Seph    schedule 17.11.2010    source источник


Ответы (3)


Проект установки, созданный с помощью Visual Studio (2008 и 2010), заменит файлы, только если номер версии был увеличен. Очевидным решением было бы просто увеличить все номера версий; но, как вы сказали, для вас это невозможно.

Поведение файла .msi в основном определяется моментом выполнения действия RemoveExistingProducts. Установщики, созданные с помощью VS 2008, планируют это действие после установки нового продукта. Модифицированные сборки, версия которых не была увеличена, не подлежат замене. Некоторые дополнительные сведения о поведении обновления описаны в этой ветке:

RemovePreviousVersions = True, но предыдущая версия не удаляется из цели машина

Чтобы изменить поведение, вы можете исправить созданный файл .msi, чтобы выполнялось действие RemoveExistingProducts перед установкой нового продукта (на самом деле так было, если вы создавали установку с помощью Visual Studio 2005). Патч может, например, можно сделать с помощью небольшого VBScript, который запускается как шаг после сборки:

Dim objInstaller
Dim objDatabase
Dim objView
Dim objResult

Dim strPathMsi 

If WScript.Arguments.Count <> 1 Then
    WScript.Echo "Usage: cscript fixRemovePreviousVersions.vbs <path to MSI>"
    WScript.Quit -1
End If

strPathMsi = WScript.Arguments(0)

Set objInstaller = CreateObject("WindowsInstaller.Installer")
Set objDatabase = objInstaller.OpenDatabase(strPathMsi, 1)
Set objView = objDatabase.OpenView("UPDATE InstallExecuteSequence SET Sequence=1450 WHERE Action='RemoveExistingProducts'")

WScript.Echo "Patching install sequence: UPDATE InstallExecuteSequence SET Sequence=1450 WHERE Action='RemoveExistingProducts'"
objView.Execute
objDatabase.Commit

WScript.Quit 0
person Dirk Vollmar    schedule 17.11.2010
comment
Отличное спасибо. Для других ссылок мой PostBuildEvent (сохраните vbs в каталог проекта установки): cscript $ (ProjectDir) fixRemovePreviousVersions.vbs $ (BuiltOuputPath) - person Seph; 18.11.2010
comment
@Seph как вы добавили PostBuildEvent для проекта MSI? - person wal; 14.07.2011
comment
Хорошо, я нашел его, спрятанный в окне «Свойства» проекта. :) - person wal; 14.07.2011

Была такая же проблема с несколькими настройками, перенесенными с 2005 на 2010. Отредактировал файл настройки (.msi) с помощью ORCA и изменил последовательность выполнения. RemoveExistingProducts перед InstallInitialize Это решило проблему установки.

person Vasu    schedule 26.11.2010

Самый простой способ выполнить полное удаление перед новой установкой - это

  1. перейдите в свой «запускаемый проект», щелкните правой кнопкой мыши и выберите «Параметры».
  2. Щелкните по кнопке «Информация о сборке». Затем увеличьте значения «версия сборки» и «версия файла», нажмите «ОК».
  3. Затем перейдите в свой проект установки. Убедитесь, что для "DetectNewInstalledVersion" установлено значение "истина", для "RemovePreviousVersion" установлено значение "истина", затем увеличьте "версию", например, с 1.0.0 до 1.0.1, после чего появится диалоговое окно с просьбой обновить "ProductCode", просто выберите " да". Убедитесь, что вы «перестроили» свой запускаемый проект, а затем перестроили проект установки.

Это поможет. Наслаждаться. Затем «щелкните правой кнопкой мыши» на папке установки, выберите «открыть папку в проводнике Windows» и загляните в папку «Release».

person Chris    schedule 10.08.2015
comment
Невозможно увеличить версию, как указано в OP: due to the legacy way that serialization was implemented the file versions for this project can not be incremented - person Seph; 11.08.2015