引用此answer,我正在尝试使用GetFileVersionInfo方法在Windows Api中获得ProductVersion。问题是通过.exe ProductVersion的属性是可见的,但是通过编程,我只能得到“0.0.0.0”。

.exe属性:

c++ - 使用GetFileVersionInfo API(C++)以编程方式获取.exe的ProductVersion-LMLPHP

输出:

c++ - 使用GetFileVersionInfo API(C++)以编程方式获取.exe的ProductVersion-LMLPHP

码:

                printf( "File Version 1: %d.%d.%d.%d\n",
                    ( verInfo->dwFileVersionMS >> 16 ) & 0xffff,
                    ( verInfo->dwFileVersionMS >>  0 ) & 0xffff,
                    ( verInfo->dwFileVersionLS >> 16 ) & 0xffff,
                    ( verInfo->dwFileVersionLS >>  0 ) & 0xffff
                    );

                printf( "File Version 2: %d.%d.%d.%d\n",
                    ( verInfo->dwFileVersionLS >> 24 ) & 0xff,
                    ( verInfo->dwFileVersionLS >> 16 ) & 0xff,
                    ( verInfo->dwFileVersionLS >>  8 ) & 0xff,
                    ( verInfo->dwFileVersionLS >>  0 ) & 0xff
                    );


                printf( "Product Version 1: %d.%d.%d.%d\n",
                    ( verInfo->dwProductVersionLS >> 24 ) & 0xff,
                    ( verInfo->dwProductVersionLS >> 16 ) & 0xff,
                    ( verInfo->dwProductVersionLS >>  8 ) & 0xff,
                    ( verInfo->dwProductVersionLS >>  0 ) & 0xff
                    );

                printf( "Product Version 2: %d.%d.%d.%d\n",
                    (verInfo->dwProductVersionMS >> 16) & 0xffff,
                    (verInfo->dwProductVersionMS >>  0) & 0xffff,
                    (verInfo->dwProductVersionLS >> 16) & 0xffff,
                    (verInfo->dwProductVersionLS >>  0) & 0xffff
                    );

                printf( "Product Version 3: %d.%d.%d.%d\n",
                    (verInfo->dwProductVersionMS >> 16) & 0xffff,
                    (verInfo->dwProductVersionMS >>  8) & 0xffff,
                    (verInfo->dwProductVersionLS >> 16) & 0xffff,
                    (verInfo->dwProductVersionLS >>  8) & 0xffff
                    );

问题是-WTF?如何获得ProductVersion,Microsoft的人员如何做到这一点?

最佳答案

版本信息资源包含一小部分固定部分( VS_FIXEDFILEINFO )和一些可选的字符串。

一些应用程序显示固定部分的数字,而某些应用程序使用FileVersion / ProductVersion字符串。

您可能应该使用该字符串(如果存在),因为它允许开发人员添加额外的信息(例如Alpha / Beta等),并且因为有些人忘记在固定部分中正确设置正确的版本。

使用VerQueryValue函数获取语言列表和字符串...

关于c++ - 使用GetFileVersionInfo API(C++)以编程方式获取.exe的ProductVersion,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45504622/

10-12 00:53