2010-11-17 2 views
15

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

DetectNewerInstalledVersion = True 
InstallAllUsers = True 
RemovePreviousVersions = True 

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

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

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

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

ответ

20

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

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

RemovePreviousVersions=True but previous version is not removed from the target machine

Чтобы изменить поведение, вы можете исправить созданный файл .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 
+3

Это потрясающая благодарность. Для других ссылок мой PostBuildEvent (сохранить vbs в каталог проекта установки): cscript $ (ProjectDir) fixRemovePreviousVersions.vbs $ (BuiltOuputPath) – Seph

+0

@Seph, как вы добавили PostBuildEvent для проекта MSI? – wal

+0

Хорошо, я нашел его, скрытый в окне свойств проекта. :) – wal

1

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

0

Самый простой способ выполнить полное удаление, прежде чем новая установка является

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

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

+0

Невозможно увеличить версию, как указано в OP: 'из-за старого способа реализации сериализации версии файла для этого проекта нельзя увеличить; – Seph