Windows 设置“";“文件/产品版本”;视窗的';二进制到任意字符串

Windows 设置“";“文件/产品版本”;视窗的';二进制到任意字符串,windows,resources,version,exe,semantic-versioning,Windows,Resources,Version,Exe,Semantic Versioning,全部。目前,我想将Windows应用程序(exe)、动态链接库(dll)或静态链接库(lib)的版本设置为使用标准版本格式(例如:3.2.0.73)而非标准版本格式(例如:3.2.0-RC3+73)的版本。查看版本信息资源()的规范,FILEVERSION和PRODUCTVERSION字段包括: 两个32位整数,由四个16位整数定义 因此,两个版本字段都应指定为具有4个版本段/部分/编号,其中每个版本段/部分/编号的宽度均为16位(无符号短整数): 对应字段的字符串变体的情况有所不同。扫描底部附

全部。目前,我想将Windows应用程序(exe)、动态链接库(dll)或静态链接库(lib)的版本设置为使用标准版本格式(例如:
3.2.0.73
)而非标准版本格式(例如:
3.2.0-RC3+73
)的版本。查看版本信息资源()的规范,
FILEVERSION
PRODUCTVERSION
字段包括:

两个32位整数,由四个16位整数定义

因此,两个版本字段都应指定为具有4个版本段/部分/编号,其中每个版本段/部分/编号的宽度均为16位(无符号短整数):

对应字段的字符串变体的情况有所不同。扫描底部附近的同一规格,尤其是该部分:

备注->字符串名称

显而易见的是,4段16位文件和产品版本的字符串表示形式可以包含任何字符:

FileVersion |文件的版本号。例如,“3.10”或“5.00.RC2”。此字符串是必需的

ProductVersion |分发文件的产品版本。例如,“3.10”或“5.00.RC2”。此字符串是必需的

因此,第一个问题(Q1):是否正式指定字符串表示的内容可以包含任意内容Q2:下一步,即使我已将这两个字段设置为具有相同的语义版本控制2.0格式的版本字符串。这很奇怪,因为两个字段都有相同的规范,它们应该包含一个字符串,但实际上只有一个字段是交替的。此外,这两个字段都没有明确说明可以为
值“FileVersion”
字段分配任何字符串值,但给出了一个明确的示例,说明此类值包含不同于
0-9
的字符:

5.00.RC2


因此,与产品版本字段相比,对文件版本字段的限制也是自相矛盾的。第三个问题(Q3):
VERSIONINFO
资源是否有更详细的规范和参考,它提供了一整套可能的参数和参数值?目前,我没有看到任何关于
FILEFLAGS
属性的可能值的描述和详细信息:
(veru PRIVATEBUILD | veru PRERELEASE | veru DEBUG)
。这里一个值得关注的值是
VER_PRERELEASE
一个与语义版本控制2.0规范中
PRERELEASE
版本部分的含义相匹配的值。

PE文件中的版本信息以固定块()开头,后跟任意数量的自由格式字符串

字符串和标志组合在任何地方都没有得到真正的验证,甚至文档也无法决定需要哪些字符串:

VS_FF_PRIVATEBUILD文件不是使用标准发布过程生成的。如果给定此值,则StringFileInfo块包含PrivateBuild字符串

VS

VS_FF_PRIVATEBUILD文件不是使用标准发布过程生成的。如果设置了此标志,StringFileInfo结构将包含PrivateBuild条目

Q1

。szKey成员可以是以下一个或多个值。这些值仅为指南

Q2

有些应用程序/字段显示固定块中的数字,有些使用“标准”字符串

Q3

包含指定文件布尔属性的位掩码


PE文件中的版本信息以固定块()开头,后跟任意数量的自由格式字符串

字符串和标志组合在任何地方都没有得到真正的验证,甚至文档也无法决定需要哪些字符串:

VS_FF_PRIVATEBUILD文件不是使用标准发布过程生成的。如果给定此值,则StringFileInfo块包含PrivateBuild字符串

VS

VS_FF_PRIVATEBUILD文件不是使用标准发布过程生成的。如果设置了此标志,StringFileInfo结构将包含PrivateBuild条目

Q1

。szKey成员可以是以下一个或多个值。这些值仅为指南

Q2

有些应用程序/字段显示固定块中的数字,有些使用“标准”字符串

Q3

包含指定文件布尔属性的位掩码

#define VER_FILEVERSION             3,10,349,0
#define VER_FILEVERSION_STR         "3.10.349.0\0"

#define VER_PRODUCTVERSION          3,10,0,0
#define VER_PRODUCTVERSION_STR      "3.10\0"

VS_VERSION_INFO VERSIONINFO
FILEVERSION     VER_FILEVERSION
PRODUCTVERSION  VER_PRODUCTVERSION
FILEFLAGSMASK   VS_FFI_FILEFLAGSMASK
FILEFLAGS       (VER_PRIVATEBUILD|VER_PRERELEASE|VER_DEBUG)

// ...

BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904E4"
        BEGIN
            VALUE "CompanyName",      VER_COMPANYNAME_STR
            VALUE "FileDescription",  VER_FILEDESCRIPTION_STR
            VALUE "FileVersion",      VER_FILEVERSION_STR

            // ...

            VALUE "ProductVersion",   VER_PRODUCTVERSION_STR
        END
    END

    // ...
END