Visual Studio 2010 - RemovePreviousVersions

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

DetectNewerInstalledVersion = True
InstallAllUsers = True
RemovePreviousVersions = True

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

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

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

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

Ответы

Ответ 1

Проект установки, созданный с помощью 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

Ответ 2

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

Ответ 3

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

  • перейдите в свой "проект запуска", щелкните правой кнопкой мыши и выберите "опции".
  • Нажмите кнопку "Информация о сборке". Затем добавьте значения "версия сборки" и "версия файла", нажмите "ok".
  • Затем перейдите в проект настройки. Убедитесь, что для параметра "DetectNewInstalledVersion" установлено значение true, "RemovePreviousVersion" - true, затем увеличивайте "версию", например, с 1.0.0 до 1.0.1, а затем появится диалоговое окно с просьбой обновить "ProductCode", просто выберите "да". Удостоверьтесь, что вы "перестроили" свой проект запуска, а затем перестроили проект установки.

Это сделает трюк. Наслаждаться. Затем "щелкните правой кнопкой мыши" в папке установки и выберите "открыть папку в проводнике Windows" и посмотрите в папке "release".