Visual Studio 2010 - RemovePreviousVersions - PullRequest
       39

Visual Studio 2010 - RemovePreviousVersions

15 голосов
/ 18 ноября 2010

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

DetectNewerInstalledVersion = True
InstallAllUsers = True
RemovePreviousVersions = True

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

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

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

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

Ответы [ 3 ]

20 голосов
/ 18 ноября 2010

Проект установки, созданный в 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
1 голос
/ 26 ноября 2010

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

0 голосов
/ 10 августа 2015

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

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

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

...