Помимо проблемы, упомянутой @Christopher Painter, скорее всего, есть еще одна проблема: проект установки, созданный с помощью Visual Studio (2008), будет заменять файлы только при увеличении номера версии.Очевидным решением будет просто увеличить все номера версий;однако это не всегда может быть тем, что вам нужно.
Поведение 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