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

时间:2016-05-27 13:12:20

标签: .net-assembly updates installshield

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

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

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

补丁1.9.7.5将省略更新功能应用程序的.exe和.dll组件文件直接安装在[安装程序](root: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个。

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

此致

2 个答案:

答案 0 :(得分: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

您还需要检查组件和密钥文件。如果组件的密钥文件在补丁中没有变化(这是"小更新"或者#34;补丁" BTW,而不是次要升级),组件中没有其他文件无论相关的版本更改如何,都会升级。请记住,组件最佳实践为每个组件声明一个二进制(版本化)文件。

从此MSDN article

  

请注意Windows Installer如何应用文件版本控制规则   何时替换现有文件。 Windows Installer首先确定   是否已经安装了组件的密钥文件   尝试安装组件的任何文件。如果   安装程序查找与组件的密钥文件同名的文件   安装在目标位置,它比较版本,日期和   两个密钥文件的语言,并使用文件版本控制规则   确定是否安装包提供的组件。如果   安装程序确定需要更换组件   密钥文件,然后它使用每个安装的文件版本控制规则   文件以确定是否替换文件。

答案 1 :(得分:0)

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