我有一个打包为 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
...
到目前为止一切顺利,安装和卸载时效果很好。但是,如果我在现有版本之上安装我的产品的新版本,它会按以下顺序发生:a) 安装新版本,在 [CommonApplicationData]\MyApp 文件夹和 [Program Files]\ MyApp...,覆盖旧版本的文件 b) 运行我的 vbs,删除 [CommonApplicationData]\MyApp 文件夹
我的新 MSI 的升级表中确实列出了旧版本的 GUID,除了这个自定义脚本之外,升级过程似乎工作正常。
产品本身非常小,所以如果安装程序总是在安装新版本之前完全删除以前的版本,那就没问题了。工作站上没有需要保留的用户设置,文件大小也不大。因此,为简单起见,我希望卸载以前的版本,而不是仅使用已更改的位进行更新。
有没有办法可以更改我的新 MSI,以便它首先卸载以前的版本?
值得注意的是,我有许多公司安装了包含自定义 vbs 的现有 MSI 版本。因此,解决方案确实需要能够应对现有已安装的 msi。
我使用 Wise Installation Express 7.0 创建 MSI。
谢谢!!
(在这里交叉发布)