VC 发布程序时设置版本信息
在windwos资源管理器中,可以查看exe或dll文件的版本信息,那么在使用vc生成exe或dll时如何设置版本信息呢,其实非常简单,只要修改资源中的VS_VERSION_INFO中的相关字段即可。这样,在对程序进行了修改后,可以生成新的版本,就不用依靠文件的日期来判断是哪个版本的了。
//-------------------------------------------------------------------------------------------------------------------
vc++实现获取软件自身的版本号
最近正在学vc,很多不会的,真是寸步难行,好在这个世界有网络这个好东西,遇到问题百度一下或是GOOGLE总能找到看来很有道理的答案,为了方便以后自己的学习,就总结了一下放在这里,也欢迎大家发表真知灼见。
//很好,很方便,无需修改,可作为程序模块直接调用。
//获取软件当前的版本
//该版本号是在资源文件中的../Version/VS_VERSION_INFO/FILEVERSION的值
CString CMFCVLCDlg::GetFileVer()
{
char cPath[200],szVersionBuffer[200];
DWORD dwHandle,InfoSize;
CString strVersion;
::GetModuleFileName(NULL,cPath,sizeof(cPath)); //首先获得版本信息资源的长度
InfoSize = GetFileVersionInfoSize(cPath,&dwHandle); //将版本信息资源读入缓冲区
if(InfoSize==0) return _T("None VerSion Supprot");
char *InfoBuf = new char[InfoSize];
GetFileVersionInfo(cPath,0,InfoSize,InfoBuf); //获得生成文件使用的代码页及文件版本
unsigned int cbTranslate = 0;
struct LANGANDCODEPAGE {
WORD wLanguage;
WORD wCodePage;
} *lpTranslate;
VerQueryValue(InfoBuf, TEXT("\\VarFileInfo\\Translation"),(LPVOID*)&lpTranslate,&cbTranslate);
// Read the file description for each language and code page.
for( int i=0; i < (cbTranslate/sizeof(struct LANGANDCODEPAGE)); i++ )
{
char SubBlock[200];
wsprintf( SubBlock,
TEXT("\\StringFileInfo\\%04x%04x\\FileVersion"),
lpTranslate[i].wLanguage,
lpTranslate[i].wCodePage);
void *lpBuffer=NULL;
unsigned int dwBytes=0;
VerQueryValue(InfoBuf,
SubBlock,
&lpBuffer,
&dwBytes);
CString strTemp=(char *)lpBuffer;
strVersion+=strTemp;
}
return strVersion;
}
//-------------------------------------------------------------------------------------------------------------------
vc 获取程序版本号,当前程序路径,文件修改时间 等
获取版本:
[cpp] view plain copy print ?
- CString GetFileVersion(char* FileName)
- {
- int iVerInfoSize;
- char *pBuf;
- CString asVer="";
- VS_FIXEDFILEINFO *pVsInfo;
- unsigned int iFileInfoSize = sizeof( VS_FIXEDFILEINFO );
-
-
- iVerInfoSize = GetFileVersionInfoSize(FileName,NULL);
-
- if(iVerInfoSize!= 0)
- {
- pBuf = new char[iVerInfoSize];
- if(GetFileVersionInfo(FileName,0, iVerInfoSize, pBuf ) )
- {
- if(VerQueryValue(pBuf, "//",(void **)&pVsInfo,&iFileInfoSize))
- {
- asVer.Format("%d.%d.%d.%d",HIWORD(pVsInfo->dwFileVersionMS),LOWORD(pVsInfo->dwFileVersionMS),HIWORD(pVsInfo->dwFileVersionLS),LOWORD(pVsInfo->dwFileVersionLS));
- }
- }
- delete pBuf;
- }
- return asVer;
- }
CString GetFileVersion(char* FileName) { int iVerInfoSize; char *pBuf; CString asVer=""; VS_FIXEDFILEINFO *pVsInfo; unsigned int iFileInfoSize = sizeof( VS_FIXEDFILEINFO ); iVerInfoSize = GetFileVersionInfoSize(FileName,NULL); if(iVerInfoSize!= 0) { pBuf = new char[iVerInfoSize]; if(GetFileVersionInfo(FileName,0, iVerInfoSize, pBuf ) ) { if(VerQueryValue(pBuf, "//",(void **)&pVsInfo,&iFileInfoSize)) { asVer.Format("%d.%d.%d.%d",HIWORD(pVsInfo->dwFileVersionMS),LOWORD(pVsInfo->dwFileVersionMS),HIWORD(pVsInfo->dwFileVersionLS),LOWORD(pVsInfo->dwFileVersionLS)); } } delete pBuf; } return asVer; }
获取路径:
[cpp] view plain copy print ?
- CString GetCurrentAppDirectory()
- {
- char szFile[MAX_PATH];
- char szPath[MAX_PATH];
- GetModuleFileName(NULL,szFile,MAX_PATH);
- size_t i;
- for(i=strlen(szFile)-1; i>0 && szFile[i]!='//'; i--);
- szFile[i]='/0';
- strcpy(szPath,szFile);
- return (szPath);
- }
CString GetCurrentAppDirectory() { char szFile[MAX_PATH]; char szPath[MAX_PATH]; GetModuleFileName(NULL,szFile,MAX_PATH); size_t i; for(i=strlen(szFile)-1; i>0 && szFile[i]!='//'; i--); szFile[i]='/0'; strcpy(szPath,szFile); return (szPath); }
获取修改时间:
[cpp] view plain copy print ?
- CString GetModifyTime(CString appname)
- {
- WIN32_FIND_DATA ffd ;
- HANDLE hFind = FindFirstFile(appname,&ffd);
- SYSTEMTIME stUTC, stLocal;
- FileTimeToSystemTime(&(ffd.ftLastWriteTime), &stUTC);
- SystemTimeToTzSpecificLocalTime(NULL, &stUTC, &stLocal);
- CString strTmp;
- strTmp.Format("%d-%d-%d,%d:%d", stLocal.wYear,stLocal.wMonth,stLocal.wDay,stLocal.wHour,stLocal.wMinute);
-
- return strTmp;
- }
CString GetModifyTime(CString appname) { WIN32_FIND_DATA ffd ; HANDLE hFind = FindFirstFile(appname,&ffd); SYSTEMTIME stUTC, stLocal; FileTimeToSystemTime(&(ffd.ftLastWriteTime), &stUTC); SystemTimeToTzSpecificLocalTime(NULL, &stUTC, &stLocal); CString strTmp; strTmp.Format("%d-%d-%d,%d:%d", stLocal.wYear,stLocal.wMonth,stLocal.wDay,stLocal.wHour,stLocal.wMinute); //-- return strTmp; }