【问题标题】:Installshield 2015 : minor upgrade (Update.exe) not replacing files for one featureInstallshield 2015:次要升级 (Update.exe) 不替换一项功能的文件
【发布时间】:2016-05-27 13:12:19
【问题描述】:

在 Installshield 2015 Premier Edition 中,我创建了一个补丁定义,将我的应用程序产品从版本 1.9.7 升级到 1.9.7.5

在 Installscript MSI 项目中,我只更改了包代码、产品版本并构建了补丁(最新的 1.9.7.5 版本 - 以前的 1.9.7 版本)。

补丁(Update.exe)在管理员权限下执行(之前安装了 1.9.7 版本)

补丁 1.9.7.5 将省略更新功能应用程序的 .exe 和 .dll 组件文件,直接安装在 [INSTALLDIR](根目录:C:\ProgramFiles\MYCOMPANY\MYAPP\confapp.exe)

所有其他组件文件均已更新;它们位于自己的 [INSTALLDIR] 子目录中,如 IS2015 的安装架构中所设计。

C:\ProgramFiles\MYCOMPANY\MYAPP\Feature1DIR\app1.exe C:\ProgramFiles\MYCOMPANY\MYAPP\Feature2DIR\app2.exe C:\ProgramFiles\MYCOMPANY\MYAPP\Feature3DIR\app3.exe C:\ProgramFiles\MYCOMPANY\MYAPP\Feature4DIR\app4.exe C:\ProgramFiles\MYCOMPANY\MYAPP\Feature5DIR\app5.exe

我正在交付新构建的应用程序并已使用 AssemblyInfo.cs 升级了我的 .dll 文件。

长话短说,我的 Update.exe 仅更新已安装的 6 个应用程序中的 5 个。

如果您已经遇到此问题,请提供任何帮助,

问候,

【问题讨论】:

    标签: .net-assembly updates installshield


    【解决方案1】:

    您能否添加与这些文件特别相关的功能/组件/文件结构和日志文件条目?它应该类似于:

    MSI (s) (B4:4C) [11:30:07:906]: Executing op: FileCopy(SourceName=eulatxt|eula.txt,SourceCabKey=FILE1,DestName=eula.txt,Attributes=512, FileSize=29239,PerTick=32768,,VerifyMedia=1,,,,, CheckCRC=0,,,InstallMode=58982400,HashOptions=0, HashPart1=-1713153497,HashPart2=58557210, HashPart3=1046945815,HashPart4=871163290,,)
    MSI (s) (B4:4C) [11:30:07:906]: File: C:\WINDOWS\system32\eula.txt; Won’t Overwrite; Won’t patch; Existing file is unversioned but modified
    

    您还需要检查您的组件和关键文件。如果您的补丁中组件的密钥文件没有更改(这是“小更新”或“补丁”顺便说一句,不是小升级),则无论关联的版本更改如何,组件中的其他文件都不会升级。请记住,组件最佳实践规定每个组件有一个二进制(版本化)文件。

    来自MSDN article

    了解 Windows 安装程序如何应用文件版本控制规则 替换现有文件时。 Windows 安装程序首先确定 之前是否已经安装了组件的密钥文件 试图安装组件的任何文件。如果 安装程序找到与组件的密钥文件同名的文件 安装在目标位置,它会比较版本、日期和 两个关键文件的语言并使用文件版本控制规则 判断是否安装包提供的组件。如果 安装程序确定它需要更换组件基础 密钥文件,然后它使用每个安装的文件版本控制规则 文件来判断是否替换文件。

    【讨论】:

    • 我很确定我正在构建一个小的升级补丁,因为我已经更改了 .ism 项目中的包代码和产品版本。谢谢,我会关注 MSDN 文章并通知您。
    • 我想为您提供日志文件条目,但我不知道在补丁执行期间生成它;我知道这是一个详细的日志,可以在启动 update.exe 时由命令行生成,但命令行仍然不确定。
    • 创建补丁时,您可以指定创建日志文件,默认情况下转到%TEMP% 有关如何在 Update.exe 中创建日志文件的选项,请查看 InstallShield 帮助Update.exe 的文件。我知道对于常规 InstallShield 引导程序,它是 setup.exe /V"/l*v logfile.txt"
    • 但是在您最初的问题中,您说您正在创建补丁定义并且仅更改包代码和版本。是哪个?
    • 我通过单击 IS2015 GUI 上的“生成新 GUID”按钮来更改包代码。我还在一般信息的一般部分将产品版本从 1.00.0000 更改为 1.9.7.5。
    【解决方案2】:

    如果这是一个 InstallScript 项目,请打开组件视图并确保将 OverWrite 设置设置为 Always。默认情况下,我认为它设置为按版本覆盖文件,然后是日期。但是,我看到过这种算法由于某种原因无法正常工作的情况,并且某些文件没有更新。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多