0

软件:InstallShield 2016 专业版

项目类型:InstallScript MSI 项目

案例场景

要修复应用程序的小错误,我需要更新“应用程序数据\文件和文件夹”部分下的 DLL 文件,其中这些 DLL 文件是从 C# 解决方案的构建中生成的。为了交付较新的构建版本 DLL 文件,我决定使用小升级,我需要更新产品版本值(1.2.4 -> 1.2.5)和包代码(每次我都会自动更新包代码)构建可执行安装程序)。

问题

  1. 机器安装了较早版本的应用程序,执行新的安装程序以触发次要升级。但是,升级过程完成后文件不会更新(例如,DLL 文件的日期修改不会更新)。
  2. 升级后(例如 1.2.5 -> 1.2.6),卸载时不会删除“应用程序数据\文件和文件夹”下的文件。如果不执行升级,文件将被正确删除。
  3. 最后一个问题是原来的 NLog.dll 版本是 3.5,然后我在项目中添加了另一个版本为 4.7 的 NLog.dll。我意识到新添加的 NLog.dll 在“Application Data\Files and Folders”和“Organization\Components”部分下都变成了“NLog1.dll”,然后我删除了版本为 3.5 的版本,并从 NLog1 重命名了新版本。 dll 到 NLog.dll。通过这些操作,即使我没有执行小升级,卸载时也不会删除 NLog.dll 和 NewtonSoftJson.dll。

我已经尝试过,但没有解决问题:

  1. 更新“应用程序数据\文件和文件夹”部分中文件的属性,为所有 DLL 文件启用“始终覆盖”。
  2. 在 OnMaintUIBefore() 中调用 FeatureReinstall() 或 ComponentReinstall()。此外,我创建了一个新的 InstallScript MSI 项目,它克隆了现有项目的大部分内容。新项目的安装程序没有文件升级/删除问题,也没有实现 InstallScript 逻辑。因此,我认为该问题不是由现有项目中的 InstallScript 引起的。
  3. 删除 Application Data\Files and Folders (NLog.dll) 下的文件,然后将其添加回来。这种方法会产生一个新问题,即使我没有使用新的安装程序升级,也不会删除 NLog.dll。

项目信息:

该项目在媒体下只有一个发布设置,没有设置升级或补丁设计。结果,构建只生成installer.exe,而不是创建installer.msi。我提到这个的原因是因为我查找创建一个小升级,但一个小升级需要installer.msi。虽然没有创建小升级或补丁,但更改产品版本仍然会触发小升级!

供参考:

根据我所做的研究,“应用程序数据\文件和文件夹”和“组织\组件”下的文件似乎在主键、注册表或命名方面搞砸了?但是,我对 InstallShield 还很陌生,我不敢对项目进行大的改动。专家的任何帮助和建议将不胜感激!

4

0 回答 0