使用Delphi XE8创建VersionInfo(Version.rc)

4

我一直在将旧的Delphi 2007代码升级到Delphi XE8,其中我观察到程序版本信息的非常奇怪的行为。

以下是我用于编译测试项目的Version.rc文件。

1 VERSIONINFO
FILEVERSION 0,0,0,0
PRODUCTVERSION 0,0,0,3
FILEOS 0x4
FILETYPE 0x2
{
BLOCK "StringFileInfo"
{
    BLOCK "080904E4"
    {
        VALUE "CompanyName", "ABC Inc\000"
        VALUE "FileDescription", "Version Testing\000"
        VALUE "FileVersion", "0.0.0.0\000"
        VALUE "ProductName", "VERT001\000"
        VALUE "ProductVersion", "A003\000"
    }
}

BLOCK "VarFileInfo"
{
    VALUE "Translation", 0x0809 0x04E4
}
}

当我从Windows 8.1机器上查看版本信息时,我得到了以下详细内容:

enter image description here

当我从Windows Server 2012查看版本信息时,我得到了这个详细信息:

enter image description here

起初我认为这可能是FILEOS参数的问题,于是我将其更改为VOS_NT_WINDOWS32甚至是VOS_NT,但是没有改变任何事情。

使用Delphi 2007编译的相同测试项目可以在两个操作系统上正确显示版本细节。

最近有人遇到过类似的问题吗?


你是否百分之百确定IDE没有覆盖你的资源?使用资源编辑器检查编译到你的应用程序中的资源。 - David Heffernan
似乎IDE总是试图覆盖标志[在项目中包含版本信息]。即使我取消选中并保存/构建项目,IDE似乎也会在每次构建之前自动选择它。让我看看是否有一些解决方法。 - DivX
2
我没有这样的问题。您可能需要手动清除 .dproj 文件。同时,我在 .dpr 文件中将 {$R *.res} 替换为 {$R MyProjectName.res},我认为这很重要。 - David Heffernan
1
如果我在记事本中编辑dproj文件并更改<VerInfo_IncludeVerInfo> false </ VerInfo_IncludeVerInfo>,IDE将不会自动选择版本信息。现在生成的EXE在两个操作系统上都显示正确的版本信息。感谢David指出问题的路径。 - DivX
@DavidHeffernan 很好的发现!我花了几个小时来追查这个问题!除了这个原因之外,另一个原因是我的 dpr 文件包含一个过时的 .res 文件。在Win7下一切都很好,但在Win10下不行。 - Edwin Yip
1个回答

4

在得到David的帮助后,我发现问题出在dproj文件上。当我指定<VerInfo_IncludeVerInfo>false</VerInfo_IncludeVerInfo>时,VersionTest.exe开始在两个操作系统上正确显示版本。


我也曾经遇到过IDE总是想重新检查版本信息复选框的问题。后来我发现,如果我在项目管理器中选择“构建配置”节点,然后转到项目属性,在选项卡中取消“在项目中包括版本信息”的勾选状态,就能保持不变。(实际上是同时为所有配置设置了版本信息复选框)。这样,编译时它就会捕捉到我的VersionInfo.rc资源文件。 - Mike Dixon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接