如何在msi安装中卸载以前的版本?

Ror*_*ory 5 windows-installer uninstall

我有一个打包为MSI的产品.当我的客户在现有版本的顶部安装我的产品的新版本时,由于自定义VBS操作,它不能很好地工作,如下所述.我的问题是:如何更改我的MSI,以便安装在顶部将始终完全卸载任何现有版本?

细节是:

我在不同的公司部署了各种版本的产品.大约每年一次,我的每个客户都会收到我的产品的新版本并部署到他们公司的工作站.负责部署的人员宁愿他们可以在旧版本的顶部安装新版本,而不必在他们的安装包中包含卸载步骤.

msi安装会创建一些文件并将其写入[CommonApplicationData]\MyApp文件夹.在执行期间,应用程序在[CommonApplicationData]\MyApp文件夹中创建更多文件.在卸载期间,我需要删除所有这些文件.由于msi没有安装它们,因此它们不会自动卸载,因此我创建了一个vbs脚本来删除该文件夹及其中的任何其他内容.我在ExecuteDeferred中输入命令来执行该vbs:

...
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
...
Run Code Online (Sandbox Code Playgroud)

到目前为止这么好,安装和卸载时工作正常.但是,如果我在现有版本的顶部安装了我的产品的新版本,则会出现以下顺序:a)安装新版本,在[CommonApplicationData]\MyApp文件夹和[Program Files]中创建各种文件MyApp ...,覆盖旧版本的文件b)运行我的vbs,删除[CommonApplicationData]\MyApp文件夹

我有新的MSI中升级表中列出的旧版本的GUID,除了这个自定义脚本之外,升级过程似乎正常.

产品本身非常小,如果安装程序在安装新版本之前总是完全删除以前的版本,那就没问题.工作站上没有需要保留的用户设置,文件大小也不大.因此,为简单起见,我希望卸载以前的版本,而不是只更改已更改的位.

有没有办法可以更改我的新MSI,以便先卸载以前的版本?

值得注意的是,我有许多公司安装了现有版本的MSI,其中包含自定义vbs.因此,解决方案确实需要能够应对现有已安装的msi.

我使用Wise Installation Express 7.0来创建MSI.

谢谢!!

(在这里交叉发布)

Ale*_*nov 6

RemoveExistingProducts行动前安排InstallInitialize行动:

在这种情况下,安装程序会在安装新应用程序之前完全删除旧应用程序.这是操作的低效放置,因为必须重新复制所有重用的文件.