您的位置:首页 > 其它

怎样获得软件的版本信息

2014-01-08 22:55 267 查看
哎,怒抢了一天火车票,愤怒了一天,艾希,马上有票!

自动更新方案中,大部分的思路是启动更新程序,自动更新程序自动下载远处server 维护的版本文件,该文件中保存最新的版本号,如1.1.1.1之类。下载之后更新程序会比较当前软件和远程server的版本号,如果版本低于远程server版本则启动下载升级程序,下载最新的程序,其中,就有一个过程,怎么获取当前软件的版本。用户可以从软件的描述文件或者属性查看到版本信息,利用windows提供的API中三个函数,GetFileVersionInfoSize,GetFileVersionInfo,VerQueryValue.通过程序方法得到版本号,here是最简单的一种。

通过制定VerQueryValue()的第二个参数为特定的TEXT(''\\'')

#pragma comment(lib,"version.lib")
#pragma comment(lib,"strsafe.lib")
#include"tchar.h"
#include"windows.h"
#include "strsafe.h"
//typedef struct String{
//WCHAR FileVersion[20];
//}VersionString;
void main()
{

WCHAR lpstrFilename[260]=_T("C:\\Program Files\\Adobe\\Reader 9.0\\Reader\\AcroRd32.exe");//测试
DWORD dwHandle  = 0;
DWORD dwVerInfoSize = GetFileVersionInfoSize(lpstrFilename, &dwHandle);//得到文件版本信息大小
if (dwVerInfoSize)
{
LPVOID lpBuffer  = LocalAlloc(LMEM_ZEROINIT, dwVerInfoSize);//申请一段空间
TCHAR *lpoutFileVerNum=new TCHAR[dwVerInfoSize+1];
if (lpBuffer)
{
if (GetFileVersionInfo(lpstrFilename, dwHandle, dwVerInfoSize, lpBuffer))//如果得到版本信息成功,lpBuffer里存放了版本文件信息
{
// Read the list of languages and code pages.
UINT cbTranslate = 0;
DWORD dwMajorVersion =0, dwMinorVersion = 0;
DWORD dwBuildNumber =0, dwRevisionNumber = 0;
// Retrieve file version number
VS_FIXEDFILEINFO * lpFixedFileInfo = NULL;//采用第一中方案时,版本信息保存在此结构体中;
UINT nFixedFileInfoSize = 0;
if (VerQueryValue(lpBuffer, TEXT("\\"), (LPVOID*)&lpFixedFileInfo, &nFixedFileInfoSize)/* &&(nFixedFileInfoSize)*/)// TEXT("\\")表示只查询buffer中vFileVersion段
{
dwMajorVersion = HIWORD(lpFixedFileInfo->dwFileVersionMS);
dwMinorVersion = LOWORD(lpFixedFileInfo->dwFileVersionMS);
dwBuildNumber = HIWORD(lpFixedFileInfo->dwFileVersionLS);
dwRevisionNumber = LOWORD(lpFixedFileInfo->dwFileVersionLS);
}
StringCchPrintf( lpoutFileVerNum ,
260 ,
TEXT(" %d.%d.%d.%d") ,
dwMajorVersion ,
dwMinorVersion ,
dwBuildNumber ,
dwRevisionNumber );
}
// lpoutFileVerNum存放了版本号。如9.0.0.0
//如果需要,可以返回  return lpoutFileVerNum;
delete lpoutFileVerNum;
}
LocalFree(lpBuffer);
}
}

////////////////////////////////////////////////////////////////////
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: