用Delphi实现动态获取版本信息

2016-01-29 14:28 19 1 收藏

用Delphi实现动态获取版本信息,用Delphi实现动态获取版本信息

【 tulaoshi.com - Delphi 】

  在应用层面上,程序员可以通过保存在应用程序文件或动态链接库文件中的版本信息判断一个文件是否应该被安装,并确定当前安装文件的冲突。在文件有了版本信息这个属性后,我们编写的程序就能够实现以下功能:

  1. 避免在新版本的组件上安装旧版本的相同组件;

  2. 在多语言系统环境中,操作系统根据文件版本信息里提供的语言信息在启动程序时决定使用的正确语言;

  3. 可以防止在不同的路径下安装多个文件的拷贝;

  4. 应用程序在运行时,便能判断文件的版本是否正确;

  5. 在应用程序的关于对话框中显示可执行文件的版本号;

  6. 在线升级程序可以判断一个文件是否因为版本过旧,从而进行必要的文件升级。

  因为Windows系统在设计上的先天缺陷,其使用的FSO并不支持文件的版本信息功能。为了能对文件的版本信息进行管理,微软在Platform SDK(平台软件开发工具包)中通过API(可编程接口)的方式为软件开发人员提供了管理版本信息的方法。这些API是GetFileVersionInfo、GetFileVersionInfo、VerFindFile、VerInstallFile和VerQueryValue,它们被存放在Windows系统目录下一个被命名为VERSION.DLL的动态链接库文件中。

  在Windows系统中任何可以包含Windows资源的文件都可以包含版本信息,比如动态链接库文件、可执行文件、字体文件等。版本信息被包装成一个VERSIONINFO结构的资源,通过编译器打包进这些文件中。

  本文试图通过分别讲解这些API的使用方法,向读者介绍在Delphi中通过编程的方法,怎样实现在运行时动态获取程序文件版本信息的功能。

  一、几个重点版本信息函数的使用方法

  在Windows操作系统中采用语言标识符来区别不同的自然语言,语言标识符是一个32位的无符号整数,一个数值唯一对应一种自然语言。因此,除了前面列出的五个函数外,在我们编写程序的时候还会经常使用到VerLanguageName函数,通过调用这个函数,我们的程序便能够自由的在用整数表示的语言标识符和用字符串表示的语言名称之间进行转换。

  以下便是用于处理版本信息函数的完整列表。须要注意的是:1. 在Windows NT 3.51或更早版本的操作系统中,版本信息函数不能操作16位的Windows文件像(File Image);2. 在Windows 95/98/Me/NT4/2000操作系统中,这些函数同时可以操作16位和32位两种文件像;3. 在Windows XP操作系统中,这些函数同时可以操作16位、32位和64位共三种文件像。


[插入表格1]

  在这篇文章中,我们将着重介绍GetFileVersionInfo、GetFileVersionInfoSize、VerLanguageName和VerQueryValue这四个函数的使用方法。在实际应用时,其余的两个函数很少使用,因此不作为重点内容进行介绍。

  1.1. GetFileVersionInfo函数

  GetFileVersionInfo函数被用来获取包含在指定文件中的版本信息。其Delphi函数声明如下:

function GetFileVersionInfo(
lptstrFilename: PChar; // 文件名
dwHandle: DWORD; // 忽略
dwLen: DWORD; // 缓冲区大小
lpData: Pointer // 版本信息缓冲区
): BOOL; stdcall;

  参数说明:

  lptstrFilename,一个以NULL结束字符串,它指定了期望从中获取版本详细的文件名。如果文件名不包含完整路径,函数将使用LoadLibrary函数的默认搜索次序进行搜索。在Windows 95/98/Me操作系统中路径名不能超过126个字符。

  dwHandle,这个参数没有使用,将被忽略。

  dwLen,请先调用GetFileVersionInfoSize函数确定文件版本信息的字节数大小。dwLen必须等于或大于这个值。如果lpDate指向的缓冲区空间不够,函数将根据实际大小裁减出文件的版本信息。

  lpData,指向一个用于保存函数调用后返回的文件版本信息的缓冲区。

  如果函数调用成功,它将返回True;否则返回False。可通过GetLastError函数得到扩展的错误信息。

  在调用GetFileVersionInfo函数前必须先调用GetFileVersionFileSize。为了从文件版本信息中获取有用信息,必须使用VerQueryValue函数。

  1.2. GetFileVersionInfoSize函数

  GetFileVersionInfoSize函

来源:http://www.tulaoshi.com/n/20160129/1493416.html

延伸阅读
标签: Web开发
?$conn = @mysql_connect('localhost:3306','test','test');include_once "js.class.php";include_once "pager.class.php";include_once "whxbb.class.php";include_once "whxbb_article.class.php";// 以上代码最好全放在一个包含文件中// 显示ID为3的记录的所有字段...
标签: Delphi
Procedure TForm1.Button1ClickSenderTObject var SysDirarray0..255of char begin //获取Windows路径 GetWindowsDirectorySysDir255 Edit1.Text=SysDir //获取系统路径 GetSystemDirectorySysDir255 Edit2.Text=SysDir end 下面将通过函数FindWindow实现...
标签: Delphi
如果我们把Handle指向桌面,哪TMediaPlay将会在桌面播放。与TCanvas不同的是,TWinControl的Handle的属性是只读的,并且GetHandle方法是静态方法,这说明,我们要Handle指向桌面只有两种方法 修改TWinControl,让Handle可写。 建立TWinControl子类,并隐藏TWinControl.GetHandle方法,在新方法中返回桌面句柄。 其中第二...
用DELPHI实现文件加密压缩 作者: e梦缘 (wnhoo) Mail:wnhoo@163.com 风花雪月 e梦情缘 点击下载此详细说明文件 概述: 在这篇文件中,讲述对单个文件的数据加密、数据压缩、自解压的实现。同样,也可以实现对多个文件或文件夹的压缩,只要稍加修改便可实现。 关键...
标签: Delphi
  在网络管理中,有时需要通过监视远程计算机屏幕来了解网上微机的使用情况。虽然,市面上有很多软件可以实现该功能,有些甚至可以进行远程控制,但在使用上缺乏灵活性,如无法指定远程计算机屏幕区域的大小和位置,进而无法在一屏上同时监视多个屏幕。其实,可以用Delphi自行编制一个灵活的远程屏幕抓取工具,简述如下。 一...

经验教程

871

收藏

39
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部