Inno setup InnoSetup';s ignoreversion标志:适用于哪些文件类型?

Inno setup InnoSetup';s ignoreversion标志:适用于哪些文件类型?,inno-setup,Inno Setup,InnoSetup为[文件]部分中的项目设置了ignoreversion标志,以指定无论文件的版本信息如何,都应复制该文件。这是一种默认设置,我在大多数情况下都会期望从设置中得到它,但如果不设置它,这并不是默认行为。因此,我在大多数设置中看到为每个文件项设置此标志,包括可执行文件和非可执行文件 我想知道这个标志有什么不同的文件类型?显然.exe和.dll会受到影响,而.txt则不会。这方面有明确的指南吗?如果文件项上的这些额外标志没有任何作用,我希望将它们去掉。对于哪些文件类型,“ignorev

InnoSetup为
[文件]
部分中的项目设置了
ignoreversion
标志,以指定无论文件的版本信息如何,都应复制该文件。这是一种默认设置,我在大多数情况下都会期望从设置中得到它,但如果不设置它,这并不是默认行为。因此,我在大多数设置中看到为每个文件项设置此标志,包括可执行文件和非可执行文件

我想知道这个标志有什么不同的文件类型?显然.exe和.dll会受到影响,而.txt则不会。这方面有明确的指南吗?如果文件项上的这些额外标志没有任何作用,我希望将它们去掉。

对于哪些文件类型,“ignoreversion”标志有意义? 对于那些可以使用Windows资源的用户。Inno安装程序中的版本信息读取深入到Windows API,因此实际上是由系统决定可以从哪些文件读取版本信息。当前,本主题指定了可以包含版本信息的文件,简要如下:

您可以将版本信息添加到可以使用Windows的任何文件中 资源,例如DLL、可执行文件或.fon字体文件

它将可能的文件列表缩小为可能包含资源的文件列表。不幸的是,没有(也不可能有)一个可能包含资源的文件扩展名列表,因为您可以拥有一个版本信息中包含一些外来文件扩展名的文件(我很久以前就有过)

因此,没有可信的建议,您应该为哪些文件保留或删除此标志

“ignoreversion”标志真的是有意的吗?我应该什么时候用?
更让我疑惑的是,为什么要包括国旗。我想说的是,只有在您确信某个文件可能被降级不会造成伤害的情况下,才应该很少谨慎地使用它。如果没有它,Inno安装程序会将已安装文件的版本与现有文件进行比较,并在文件较旧时进行替换,这在我看来是最需要的行为。

版本标志指的是应用程序安装程序包的版本,而不是安装程序附带的文件的DLL版本。因此.txt文件也有一个版本,“ignoreversion”标志对安装程序包中的任何文件都有意义。开发人员可以使用InnoSetup提供的任何标志来跟踪和调整应用程序版本之间的文件更新。

我始终给出的一般建议是绝对始终在
{app}
中的每个文件上使用
ignoreversion

它不会对没有资源的文件造成伤害(并且可能会提高性能,因为Inno不必浪费时间去发现它们缺乏资源),而且几乎总是你想要的应用程序文件(否则你可能会在一些奇怪的文件混合状态中结束)

但是,对于安装在
{app}
之外的文件(通常是
{sys}
{cf}
),通常不应使用
忽略版本
,而应只允许升级。但是YMMV

(注意,可能需要特别注意,以确保升级
{app}之外的通用文件。)
,因为通常只有EXE和DLL文件具有版本信息,甚至其中一些文件可能缺少版本信息,或者根据文件源的不同,更新不一致。其他注意事项也适用于常见文件,例如使用
共享文件


(升级为回答。)

我们有时不增加可执行文件的版本号,但仍会放弃或尝试新的安装版本。如果未设置ignoreversion,安装程序将不会执行任何操作,除非之前调用了卸载。此外,如果用户运行较旧的安装程序包,则应安装较旧的应用程序版本,而不是静默地什么也不做。因此,对我来说,这个标志比不设置它更有用。我经常给出的一般建议是绝对总是在
{app}
中的每个文件上使用
ignoreversion
。它不会对没有资源的文件造成伤害(并且可能会提高性能,因为Inno不必浪费时间去发现它们缺乏资源),而且几乎总是你想要的应用程序文件(否则你可能会在一些奇怪的文件混合状态中结束)。但是,对于安装在
{app}
之外的文件(通常是
{sys}
{cf}
),通常不应使用
忽略版本
,而应只允许升级。但是YMMV。@Miral我很乐意把你的评论作为答案:)@kwesoly:很公平。作为答复转载。这对我来说没有多大意义。问题是关于
ignoreversion
标志,而不是关于某些版本标志。此外,纯文本文件不能包含版本信息,因此,
ignoreversion
标志不会以检查文件版本的方式影响它们。另一方面,DLL库可以有版本信息,
ignoreversion
标志会导致检查此信息。您的最后一句话—由开发人员使用InnoSetup提供的任何标志跟踪和调整应用程序版本之间的文件更新。可能是真的,但为什么要这么说呢?想想版本,比如您创建的包/安装程序的版本。版本永远不是文件的版本(DLL版本),而是包的版本。安装程序包中的所有文件都具有相同的程序包版本,安装程序不关心也不知道您的DLL版本是什么。想象一下安装程序版本1.0。在下一次更新中,安装程序将获得版本1.1,其中的TXT文件也将标记为1.1。此信息不存储在文件本身中,而是在安装软件包/应用程序时从注册表中的InnoSetup中存储。如果您指定