获取windows可执行文件的version信息(版本号)

之前在msdn上Version Information看到文件版本信息的介绍,看着整体比较复杂,就一直没做。现在需要获取ocx文件的版本号,所以查找了下相关资料,比较有用的就是VS_FIXEDFILEINFO结构,获取这个参数就基本可以完成任务了。

代码如下:

 1 //typedef struct tagVS_FIXEDFILEINFO
 2 //{
 3 //    DWORD   dwSignature;            /* e.g. 0xfeef04bd */
 4 //    DWORD   dwStrucVersion;         /* e.g. 0x00000042 = "0.42" */
 5 //    DWORD   dwFileVersionMS;        /* e.g. 0x00030075 = "3.75" */
 6 //    DWORD   dwFileVersionLS;        /* e.g. 0x00000031 = "0.31" */
 7 //    DWORD   dwProductVersionMS;     /* e.g. 0x00030010 = "3.10" */
 8 //    DWORD   dwProductVersionLS;     /* e.g. 0x00000031 = "0.31" */
 9 //    DWORD   dwFileFlagsMask;        /* = 0x3F for version "0.42" */
10 //    DWORD   dwFileFlags;            /* e.g. VFF_DEBUG | VFF_PRERELEASE */
11 //    DWORD   dwFileOS;               /* e.g. VOS_DOS_WINDOWS16 */
12 //    DWORD   dwFileType;             /* e.g. VFT_DRIVER */
13 //    DWORD   dwFileSubtype;          /* e.g. VFT2_DRV_KEYBOARD */
14 //    DWORD   dwFileDateMS;           /* e.g. 0 */
15 //    DWORD   dwFileDateLS;           /* e.g. 0 */
16 //} VS_FIXEDFILEINFO;
17 {
18     char szAppFullPath[_MAX_PATH] = {0};
19
20     GetModuleFileName(NULL,szAppFullPath,MAX_PATH);//得到程序模块名称,全路径
21
22     //获取当前文件的版本信息
23     DWORD dwLen = GetFileVersionInfoSize(szAppFullPath,NULL);
24     char *pszAppVersion = new char[dwLen+1];
25     if(pszAppVersion)
26     {
27         memset(pszAppVersion,0,sizeof(char)*(dwLen+1));
28         GetFileVersionInfo(szAppFullPath,NULL,dwLen,pszAppVersion);
29         CString strVersion;
30         UINT nLen(0);
31         VS_FIXEDFILEINFO *pFileInfo(NULL);
32         VerQueryValue(pszAppVersion,"\\",(LPVOID*)&pFileInfo,&nLen);
33         if(pFileInfo)
34         {
35             //获取文件版本号
36             strVersion.Format("%d.%d.%d.%d",HIWORD(pFileInfo->dwFileVersionMS),
37                 LOWORD(pFileInfo->dwFileVersionMS),
38                 HIWORD(pFileInfo->dwFileVersionLS),
39                 LOWORD(pFileInfo->dwFileVersionLS));
40         }
41     }
42 }

基本思路就是先获取可执行文件所在的全路径,然后使用GetFileVersionInfo函数,获取版本信息;之后使用VerQueryValue函数,查询版本信息。

时间: 2024-10-05 05:15:59

获取windows可执行文件的version信息(版本号)的相关文章

[C语言](二)01 获取Windows图形构件大小信息

SYSMETS.c #include <windows.h> #include "SYSMETS.H"//自定义的单元,所以用"",不是用<> //消息循环处理函数,Windows回调函数 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); //Windows程序的入口函数 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevIn

python通过wmi获取windows下进程的信息

linux应该有很多方法可以获取进程的cpu和内存信息,但windows貌似之前接触的是psutil,后来查了一些资料发现wmi也能够获取进程的信息,但貌似效率不太高,应该可以做监控等性能要求不太高的情况 下载wmi,这个网上很多方法和途径,我是用easyinstall来安装,这个不详细说明了 直接附上代码: import wmi from win32com.client import GetObject import win32gui,time mywmi = GetObject("winmg

如何在跨平台的情况下获取可执行文件的详细信息和属性

很多情况下我们需要获取到系统中一些可执行文件的版本号,以便做一些附加动作!其实可以使用jna获取,但是这将依赖人家,所以还是Java自己来吧!好啦,直接上代码吧 /** * @Description: * * @Title: FileInfoUtil.java * @Package com.joyce.util * @Copyright: Copyright (c) 2014 * * @author Comsys-LZP * @date 2014-5-12 下午03:46:32 * @versi

利用Python脚本获取Windows和Linux的系统版本信息

查看系统版本信息是一件家常便饭的事情,有时候需要将版本信息录入到资产管理系统中,如果每次手动的去查询这些信息再录入系统那么是一件令人呢头疼的事情,如果采用脚本去完成这件事情,那么情况就有所不同了. 在Python的世界里,获取Windows版本信息和Linux的版本信息都可以采用platform模块,但platform模块也不是万能的,有些特殊的信息(比如Windows的内部版本号)这个模块拿不到,那么只能另辟蹊径了. 在Linux系统中,可以简单的认为一切都是文件,那么就算没有现成的命令可用时

获取Windows平台下 安装office 版本位数信息

最近在处理客户端安装程序过程,有一个需求:需要检测Windows平台下安装office 版本信息以及获取使用的office是32 位还是64 位: 当检测出office 位数为64位时,提示当前office 不支持程序的使用. 找了很多资料,一般情况下,是不能直接获取office 安装位数信息的:加上Windows 32 位与64位系统 ,安装使用的office在不同Windows系统下注册表位置不一样,久久不能解决这个需求. 话不多说,先记录一下代码. 注意事项: Environment.Is

获取windows版本信息

procedure TForm1.Button1Click(Sender: TObject); Var OSVI:OSVERSIONINFO; begin OSVI.dwOSversioninfoSize:=Sizeof(OSVERSIONINFO); GetVersionEx(OSVI); Caption:=IntToStr(OSVI.dwMinorVersion)+',' +IntToStr(OSVI.dwMinorVersion)+',' +IntToStr(OSVI.dwBuildNum

[Shell]如何获取Maven工程的project.version信息

问题: 今天遇到Shell中如何能获取Maven项目工程中的project.version信息的问题 解决方案: 使用Maven的Exec 插件 #! /bin/bash MVN_VERSION=$(mvn -q -N -Dexec.executable="echo" -Dexec.args='${project.version}' org.codehaus.mojo:exec-maven-plugin:1.3.1:exec) ecHO $MVN_VERSION  

Windows和Linux下获取当前可执行文件路径和工作目录

1.Windows下的获取当前可执行文件的路径和当前工程目录. (1)获取当前可执行文件路径: #include <shlwapi.h> #pragma comment(lib, "shlwapi.lib") wchar_t szExePath[MAX_PATH] = {0}; GetModuleFileNameW(NULL, szExePath, sizeof(szExePath)); PathRemoveFileSpecW(szExePath); (2)如果想获取当前工

Qt 获取Windows内存信息

通过调用Windows API来获取Windows 内存信息,并显示在界面上,通过与Windows 内存管理器对比可以看到结果是正确的. 实现的小工具的界面效果与内存管理器对比如下: 实现的完整代码: #pragma execution_character_set("utf-8") #ifndef QMEMORYINFO_H #define QMEMORYINFO_H #include <QtWidgets/QWidget> #include <QLabel>