最近碰到了需要修改文件版本信息,整理如下,
文件信息結(jié)構(gòu)描述:
struct VS_FIXEDFILEINFO {
DWORD dwSignature; ????????????//=0xFEEFO4BD ?
DWORD dwStrucVersion; ?????????//該結(jié)構(gòu)的版本信息,分高低版本
DWORD dwFileVersionMS; ????????//主文件版本
DWORD dwFileVersionLS; ????????//次文件版本
DWORD dwProductVersionMS; ?????//主產(chǎn)品版本
DWORD dwProductVersionLS; ?????//次產(chǎn)品版本
DWORD dwFileFlagsMask; ????????//文件標(biāo)志掩碼
DWORD dwFileFlags; ????????????//文件標(biāo)志(是否包含調(diào)試版本,動(dòng)態(tài)版本結(jié)構(gòu)...)
DWORD dwFileOS; ???????????????//文件原定的操作系統(tǒng)(VOS_DOS,VOS_NT,VOS__WINDOWS16...)
DWORD dwFileType; ?????????????//文件類型(VFT_UNKNOWN,VFT_APP,VFT_DLL...)
DWORD dwFileSubtype; ??????????//當(dāng)dwFileType為VFT_APP或VFT_DLL時(shí)該值為0,當(dāng)為驅(qū)動(dòng)信息VFT_APP或字體信息時(shí)該值包含其具體的信息
DWORD dwFileDateMS; ???????????//主時(shí)間戳
DWORD dwFileDateLS; ???????????//次時(shí)間戳
};
===============================================
struct st_Language
{
?WORD wLanguageID;
?WORD wCodePage;
};
CString str("D:\\test\\test.exe");
?DWORD dwSize = GetFileVersionInfoSize(str,NULL);
?if(0 == dwSize) return;
?LPBYTE pBlock = (BYTE*)malloc(dwSize);
?bool b = GetFileVersionInfo(str,0,dwSize,pBlock);
?char* pVerValue = NULL;
?UINT nlen1 = 0;
?VerQueryValue(pBlock,TEXT("file://VarFileInfo//Translation"),
??(LPVOID*)&pVerValue,&nlen1);
?//獲取語言
?char* pLanValue = NULL;
?UINT nLen2 = 0;
?VerQueryValue(pBlock,"VarFileInfo\\Translation",(LPVOID*)&pLanValue,&nLen2);
?//080404b0為中文
?st_Language stlang = *((st_Language *)pLanValue);
?//獲取版本屬性
?VerQueryValue(pBlock,TEXT("file://%22),(LPVOID*)%26pVerValue,%26nlen1/);
?VS_FIXEDFILEINFO *pfixfileinfo = (VS_FIXEDFILEINFO *)pVerValue;
//修改屬性
?pfixfileinfo->dwFileVersionLS = 1234;
?pfixfileinfo->dwFileVersionMS = 4321;
?pfixfileinfo->dwProductVersionLS = 101;
?pfixfileinfo->dwProductVersionMS = 1010;
//修改資源
?HANDLE handle = BeginUpdateResource(str,FALSE);
?BOOL result? = UpdateResource(handle
??,RT_VERSION
??,MAKEINTRESOURCE(1)
??,stlang.wLanguageID
??,pBlock
??,dwSize);
?if (result == FALSE)
?{
??AfxMessageBox("Updata Resource False.");
?}?
?EndUpdateResource(handle,FALSE);
free(pBlock);
posted on 2007-08-20 16:44
我風(fēng) 閱讀(3863)
評(píng)論(0) 編輯 收藏 引用