在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个。
如果您已经遇到过这个问题,请提供任何帮助
此致
答案 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”。默认情况下,它设置为按版本覆盖文件,然后是日期。但是,我看到这种算法由于某种原因无法工作,并且某些文件没有更新的情况。