Как удалить предыдущую версию как часть установки msi?

У меня есть продукт, упакованный как MSI. Когда мои клиенты устанавливают новую версию моего продукта поверх существующей версии, она работает неправильно из-за пользовательского действия VBS, как описано ниже. Мой вопрос: :, как я могу изменить свой MSI, чтобы установка поверх всегда приводила к полному удалению любой существующей версии заранее?

Деталь:

У меня есть продукт с множеством версий, развернутых в разных компаниях. Примерно раз в год каждый из моих клиентов получал новую версию моего продукта и развертывал ее на рабочих станциях своей компании. Люди, ответственные за развертывание, предпочли бы, чтобы они могли установить новую версию поверх старой версии, вместо того, чтобы включать шаг удаления в свой установочный пакет.

Установка msi создает и записывает некоторые файлы в папку [CommonApplicationData]\MyApp.Во время выполнения приложение создает дополнительные файлы в папке [CommonApplicationData]\MyApp. Во время удаления мне нужно удалить все эти файлы. Поскольку они не устанавливаются с помощью msi, они не удаляются автоматически, поэтому я создал сценарий vbs, который удаляет эту папку и все остальное в ней. Я помещаю команду для выполнения этого vbs в ExecuteDeferred:

...
RemoveFiles
RemoveFolders
CreateFolders
MoveFiles
InstallFiles
PatchFiles
If REMOVE="ALL" Then
    REM line below is my custom script
    call VBScript From Installation (MyApp_UninstallCleanup)  
End
DuplicateFiles
BindImage
CreateShortcuts
...

Пока все хорошо, и он отлично работает при установке и удалении. Однако, если я устанавливаю новую версию своего продукта поверх существующей версии, все происходит в следующем порядке :a )установить новую версию, создав различные файлы в папке [CommonApplicationData]\MyApp и в [Program Files]\MyApp..., перезаписав файлы старой версии b )запустить мой vbs, удалив папку [CommonApplicationData]\MyApp

У меня есть GUID для старых версий, перечисленных в таблице обновлений в моем новом MSI, и, кроме этого пользовательского сценария, процесс обновления работает нормально.

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

Есть ли способ изменить мой новый MSI, чтобы он сначала удалял предыдущие версии?

Примечательно, что у меня есть много компаний, в которых установлена ​​существующая версия MSI, содержащая пользовательский файл vbs. Таким образом, решение действительно должно быть таким, чтобы оно могло справиться с существующим установленным msi.

Я использовал Wise Installation Express 7.0 для создания MSI.

спасибо!!

(крест -разместил здесь)

5
задан Rory 4 July 2012 в 11:56
поделиться