为什么我的新Windows Installer文件(MSI)不能在旧版本的MSI上正确安装?

时间:2009-06-18 15:46:45

标签: windows-installer

症状

我新创建了安装程序包(MSI),用于安装我的应用程序的新版本。

我的安装有一个新的ProductCode,但我保留了UpgradeCode。

因此,当我执行新的MSI时,它首先正确卸载旧版本。甚至还删除了Program Files \ MyProduct目录。

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

如果我首先使用“添加删除程序”卸载旧版本,然后安装新版本,则一切正常。只有当我将新版本安装在旧版本之上时,才会出现此问题。

可能的原因

旧版本中各种dll和exes的版本号都搞砸了。旧的exe版本是4.11.1234。新exe的版本是4.5.1234。根据“文件版本控制规则”,新文件不会覆盖旧文件。我之间的问题是,当InstallFiles操作执行时,目标文件不再驻留在磁盘上。

其他信息

我的目标是Windows Installer 3.1。

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

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

如果上下文没有明确问题,请告诉我......

谢谢!

1 个答案:

答案 0 :(得分:5)

我假设您还更改了PackageCodeProductVersion

  

“我抓我的原因   头是那个时候的   InstallFiles动作执行   目标文件不再驻留   磁盘。“

是的,但MSI决定在文件被物理删除之前安装/不安装文件 - 当第一次通过InstallExecute序列时,当文件仍在硬盘驱动器上时,决定做出决定。

我遇到了问题,我能够通过将文件版本更改为比硬盘驱动器上的版本更新来解决问题 - 你能做到吗?

另一种选择:您使用的是InstallShield吗?您可以选择在单个文件上设置两个属性中的一个来解决问题:1)始终覆盖,2)覆盖系统版本。 “Always Overwrite”将自动将版本号设置为65535.0.0.0,从而启用安装。 “覆盖系统版本”允许您输入自己的版本,高于实际文件版本,从而也可以启用安装。右键单击该文件,然后参见属性以设置这些选项。