Installshield 2015:次要升级(Update.exe)不替换一个功能的文件

问题描述 投票:0回答:2

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

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

修补程序(Update.exe)在Admin权限下执行(之前安装的1.9.7版本)

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

所有其他组件文件都会被尊重地更新;它们位于ISO15中安装架构中设计的[INSTALLDIR]子目录中。

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
2个回答
0
投票

您能否添加您的功能/组件/文件结构以及与这些文件相关的日志文件条目?它应该看起来像:

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

您还需要检查组件和密钥文件。如果组件的密钥文件未在修补程序中更改(这是“小更新”或“修补程序”BTW,而不是次要升级),则无论相关的版本更改如何,组件中的其他任何文件都不会升级。请记住,组件最佳实践为每个组件声明一个二进制(版本化)文件。

从这个MSDN article

请注意Windows Installer在替换现有文件时如何应用文件版本控制规则。在尝试安装组件的任何文件之前,Windows Installer首先确定是否已安装组件的密钥文件。如果安装程序找到与目标位置中安装的组件密钥文件同名的文件,则会比较两个密钥文件的版本,日期和语言,并使用文件版本控制规则来确定是否安装由包。如果安装程序确定需要替换密钥文件上的组件库,则它会使用每个已安装文件上的文件版本控制规则来确定是否替换该文件。


0
投票

如果这是一个InstallScript项目,请打开“组件”视图,并确保将“OverWrite”设置设置为“始终”。默认情况下,它设置为按版本覆盖文件,然后设置为Date,我认为。但是,我已经看到这种算法由于某种原因不起作用的情况,并且一些文件没有更新。

© www.soinside.com 2019 - 2024. All rights reserved.