为什么我的新的Windows安装程序文件(MSI)正确安装了旧版本的MSI的?(Why doesn&

2019-06-23 14:05发布

症状

我已经新创建的安装程序包(MSI),该安装我的应用程序的新版本。

我有我的安装新的产品代码,但我已经离开了的UpgradeCode相同。

所以,当我执行新的MSI它首先正确地卸载旧版本。 即使是计划Files \ myProduct的目录被删除。

但卸载旧版本后,安装程序,然后只是部分安装新版本。 如果我修复受损的新安装(使用添加删除程序 - >修改安装 - >修复),一切都是固定的。

如果我第一次使用添加删除程序,然后安装卸载旧版本的新版本,一切都很正常。 只有当我安装新版本在旧版本的顶部出现该问题。

可能的原因

在旧版本不同的DLL和EXE文件的版本号是搞砸了。 老EXE的版本是1234年4月11日。 该版本的新的EXE是1234年4月5日。 据“文件版本规则”新的文件将不会覆盖旧的文件。 为什么我抓我的头的原因是由当时的InstallFiles动作执行目标文件不再驻留在磁盘上。

其他信息

我针对的Windows Installer 3.1。

我安装的执行顺序大致是:

...
InstallValidate
RemoveExistingProducts
InstallInitialize
...
InstallFiles
...
InstallExecute
InstallFinalize
....

如果这种情况下不会使问题清晰,让我知道...

谢谢!

Answer 1:

我假设你也改变了PackageCodeProductVersion

“为什么我抓我的头的原因是由当时的InstallFiles动作执行目标文件不再驻留在磁盘上。”

是的,但微星使得安装/不安装文件的决定之前的文件遭到物理删除 - 这决定第一遍通过InstallExecute顺序期间进行,当文件仍然在硬盘上。

我有你有问题,我可以通过更改文件的版本会比那些已经在硬盘上更新来解决这个问题 - 你能做到吗?

另一种选择:你使用InstallShield? 您可以选择对个别文件设置两个属性会解决这个问题的一个:1)始终覆盖,2)覆盖系统版本。 “始终覆盖”将自动将版本号设置到65535.0.0.0,从而使安装。 “覆盖系统版本”可以让你在你自己的版本进入,不是真正的文件版本高,从而也使安装。 在文件上单击鼠标右键,看属性设置这些选项。



文章来源: Why doesn't my new Windows Installer file (MSI) install properly over an older version of the MSI?