获得文件的版本信息

我们在许多情况下,(如编制安装程序时),需要获得应用程序的版本信息,以决定是否更新文件。最简单的办法是比较文件的生成日期。其实,对于EXE、DLL、OCX等类型的文件有更加准确的方法获得文件的版本信息。利用API函数GetFileVersionInfo,GetFileVersionInfoSize,VerQueryValue,我们可以很方便地获得文件的一系列信息。

以下使用C++ Builder 4为例演示具体的操作:

首先,建立一个新项目,在主窗口上放置一个Edit控件,一个Button控件。

然后,在Button的点击事件中加入如下代码:

void __fastcall TForm1::
Button1Click(TObject *Sender)
{
//首先获得版本信息资源的长度
DWORD dwHandle,InfoSize;
InfoSize = GetFileVersionInfoSize(Edit1- >Text.c_str(),&dwHandle);
//将版本信息资源读入缓冲区
char *InfoBuf = new char[InfoSize];
GetFileVersionInfo(Edit1->Text.c_str(),0,InfoSize,InfoBuf);
//获得生成文件使用的代码页及字符集信息
char *pInfoVal;
unsigned int dwInfoValSize;
VerQueryValue(InfoBuf,"\\VarFileInfo\\Translation",&((void *)pInfoVal), &dwInfoValSize);
AnsiString V="\\StringFileInfo\\"+IntToHex(*((unsigned short int *)
pInfoVal),4)+IntToHex(*((unsigned short int *) &pInfoVal[2]),4)
+"\\FileVersion";
//获得具体的版本号
VerQueryValue(InfoBuf, V.c_str(),&((void *)pInfoVal),&dwInfoValSize);
Edit1->Text = AnsiString(pInfoVal).SetLength(dwInfoValSize-1);
delete InfoBuf;
}

以上,仅示范如何获得文件版本。分别替换FileVersion为CompanyName,FileDescription,InternalName,LegalCopyright,OriginalFilename,ProductName,ProductVersion可以得到文件的公司名称,文件描述,内部名称,合法版权,原始文件名,产品名称,产品版本等一系列信息.

时间: 2024-10-27 22:42:26

获得文件的版本信息的相关文章

C#:获得文件版本信息及只读文件的删除

Author:David EulerDate: 2004/11/16Email:de_euler-david@yahoo.com.cn 有任何问题,请与我联系:) 获取文件的版本信息: FileVersionInfo myFileVersionInfo1 = FileVersionInfo.GetVersionInfo("D:\\TEST.DLL"); textBox1.Text="版本号: " + myFileVersionInfo1.FileVersion; 更

Delphi实现动态获取版本信息

文件版本信息的存在使得应用程序正确的安装文件变得简单,并且使安装程序能够分析文件的当前安装状态.通常,版本信息应该包括文件的版本号.文件功能描述以及文件作者等多项重要内容. 在应用层面上,程序员可以通过保存在应用程序文件或动态链接库文件中的版本信息判断一个文件是否应该被安装,并确定当前安装文件的冲突.在文件有了版本信息这个属性后,我们编写的程序就能够实现以下功能: 1. 避免在新版本的组件上安装旧版本的相同组件: 2. 在多语言系统环境中,操作系统根据文件版本信息里提供的语言信息在启动程序时决定

将 svn 版本修订号写入程序版本信息

tsvn 带有一个命令行程序 subwcrev.exe. 可以对一个指定文件进行一些宏替换, 比如: 将 $WCREV$ 替换成当前版本号. 这个是最有用的. 详细帮助见http://tortoisesvn.net/docs/nightly/TortoiseSVN_zh_CN/tsvn-subwcrev-keywords.html 以 vc6 为例, 文件的版本信息保存在 rc 文件. 编译成 res 文件, 然后和其他 obj 一起 link. 现在的思路就是. 编辑 rc 文件, 将版本号比

用exe4j打包时能写入版本信息吗?就是在exe文件上右键显示的版本信息?

问题描述 用exe4j打包时能写入版本信息吗?就是在exe文件上右键显示的版本信息?程序是java语言写的​或者别的办法也行..有知道的吗?

为Tiny4412设备驱动在proc目录下添加一个可读版本信息的文件

http://blog.csdn.net/morixinguan/article/details/77808088 上节,我们明白了proc文件系统的作用,接下来我们在友善之臂已经写好的led驱动的基础上,在proc目录下创建一个文件夹,然后加入led驱动的版本信息读取. 我们在init函数的最后加入: //定义proc文件系统节点 struct proc_dir_entry *dev_dir , *dev_version; //创建一个目录 dev_dir = proc_mkdir("Tiny

python获取Linux下文件版本信息、公司名和产品名的方法_python

本文实例讲述了python获取Linux下文件版本信息.公司名和产品名的方法,分享给大家供大家参考.具体如下: 区别于前文所述.本例是在linux下得到文件版本信息,主要是通过pefile模块解析文件 中的字符串得到的.代码如下: def _get_company_and_product(self, file_path): """ Read all properties of the given file return them as a dictionary. @retur

endupdateresource-updateresource修改pe文件版本信息时遇到问题,求大神解答

问题描述 updateresource修改pe文件版本信息时遇到问题,求大神解答 我用这里的方法修改文件版本信息:http://www.codeproject.com/Articles/6317/Updating-version-information-at-run-time 在endUpdateResource时会把PE文件损坏(几十M的东西变成几百K),何解?

Swift读取App版本信息 和 PCH 文件

  Swift读取App版本信息 有时间我们需要读取APP的版本信息之类的配置信息,这样的我们可以使用方法:NSBundle.mainBundle().infoDictionary 来获取 Example: Swift let infoDictionary = NSBundle.mainBundle().infoDictionary let shortVersion = infoDictionary!["CFBundleShortVersionString"] print(shortV

寻一解决方法实现c#获取apk文件版本信息

问题描述 最近有一个问题,要c#获取上传的apk的包名,版本号,版本名称,也用过很多方法,试过jar文件转dll,但是总遇到莫名的错误,希望能有个做过这方面的人指点一下..... 解决方案 解决方案二:APK是个压缩包格式吧,解压下,里面应该有个AndroidManifest.xml解析这个就可以了解决方案三:知道有个AndroidManifest.xml,但是有具体的代码么,我邮箱306706769@qq.com解决方案四:去网上下个SharpZip,自己搜搜教程.这个XML,不知道什么编码格