gpt4 book ai didi

windows-installer - 为什么我的新 Windows Installer 文件 (MSI) 无法在旧版本的 MSI 上正确安装?

转载 作者:行者123 更新时间:2023-12-01 12:01:24 25 4
gpt4 key购买 nike

症状

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

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

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

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

如果我先使用添加删除程序卸载旧版本,然后安装新版本,一切都很好。仅当我在旧版本之上安装新版本时才会出现此问题。

可能的原因

旧版本中各种 dll 和 exe 的版本号被打乱了。旧的 exe 版本是 4.11.1234。新 exe 的版本是 4.5.1234。根据“文件版本控制规则”,新文件不会覆盖旧文件。我挠头的原因是当 InstallFiles 操作执行时,目标文件不再驻留在磁盘上。

其他信息

我的目标是 Windows Installer 3.1。

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

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

如果此上下文不能使问题清楚,请告诉我...

谢谢!

最佳答案

我假设您还更改了 PackageCodeProductVersion

"The reason why I am scratching my head is that by the time the InstallFiles action executes the destination file no longer resides on the disk."

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

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

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

关于windows-installer - 为什么我的新 Windows Installer 文件 (MSI) 无法在旧版本的 MSI 上正确安装?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1013475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com