Mik*_*e D 14 windows-installer
我对msi版本号感到困惑. 此处,Property表和Update表中用于ProductVersion的版本号限制为256或更少的主要和次要部分. 这里 File表中使用的版本号可以包含65536或更少的主要和次要部分.
其中一个错了吗?这两个"版本"完全无关或者是什么?
另外,我不明白在File表文件表的描述中发现了以下内容.
"版
此字段是版本化文件的版本字符串.对于非版本化文件,此字段为空.输入此字段的文件版本必须与安装包中包含的文件版本相同."
如何确定" 安装包中包含的文件版本 "?例如,Visual Studio的VS_VERSION_INFO资源中的FILEVERSION值是多少?使用NotePad或Word创建的某些文件意味着什么?
究竟什么是"非版本化"文件?在VS_VERSION_INFO资源中有一个FILEVERSION = 0.0.0.0吗?或者是其他东西?是否所有.exe文件都被视为版本?
Chr*_*ter 26
是的,FileVersions和ProductVersions是无关的.ProductVersion显示在"添加/删除程序"(程序和功能)中,主要用于主要升级方案以确定应该发生的情况.
ProductVersion属性定义为[0-255].[0-255].[0-65535](分别为8,8,16符号位)文件版本定义为[0-65535].[0-65535].[ 0-65535].[0-65535](16,16,16,16有符号位......)
Text/XML/Config/BMP ectera将为null.通常,您的创作工具(如InstallShield)将在构建时反映您的版本化PE文件(DLL,OCX,SYS,EXE ...),并自动将其版本号创建到File表中.
InstallShield中还有一个名为"Always Overwrite"的选项,它在构建时向MSI"版本所在"并告诉它您的非PE文件(TXT/XML ....)确实有版本号(通常为65535.0.0.0)这会在决定覆盖或不覆盖时利用MSI中版本化文件特朗普非版本文件的行为.
从技术上讲,EXE可以是非版本的,但这是一种反模式.非版本化文件是没有嵌入版本资源记录的任何文件.
另一件需要理解的是,默认情况下,Windows Installer会在决定src文件是否覆盖目标时查看目标文件的创建日期和修改日期.如果CD和MD等于它被认为是'处女'(我的术语)并且发生覆盖.如果它们不相等则被视为"用户数据",除非您执行"始终覆盖"技巧,否则不会覆盖它.
另一件需要理解的是,这些评估发生在组件的密钥文件级别.组件中的任何其他伴随文件(如果不遵循每个组件的1:1文件指南)将遵循密钥文件的方向.
还要意识到AssemblyVersion和AssemblyFileVersion之间存在差异..NET AssemblyFileVersion属性映射到旧的FileVersion属性.AssemblyVersion属性仅用于强命名,MSI不关心它.
最后,谷歌"Windows安装程序组件规则"获取更多信息.
如果这有意义,如果您有任何其他问题,请告诉我.你实际上在一个问题中询问了十几个问题,所以我可能会错过一些东西.也请随时接受这个答案.