VC++ MFC程式設計版本資訊控制
VC++ MFC程式設計版本資訊控制
一、工程中新增版本資訊
綠色框內為檔案本件(FileVersion),紅色框為產品版本(ProductVersion),兩者的區別是一個檔案可能包含多個產品,所以一般我們是獲取軟體的產品版本(ProductVersion)實現版本的控制。
需要注意的是不管是FileVersion還是ProductVersion,在兩個框內的資訊必須一致,不然可能會出現意想不到的問題。
二、資料庫中新增版本資訊
資料庫建表的操作我這邊就不做詳細介紹了,這裡使用的是Sqlserver2005資料庫,表名為ToolVersionList,表的資料型別為Varchar,版本格式如圖1.0.4,與第一步中的ProductVersion一致。
三、編寫程式碼
這裡沒有連線資料庫的相關內容操作,如果還不知道怎樣連線資料庫的同學可以參考我介紹連線資料庫的文章,這裡就不做詳細介紹了。
BOOL CheckToolVersion()
{
CString csVer;
CString strVersion ;
CString sql;
_variant_t var;
TCHARszFullPath[MAX_PATH];
DWORDdwVerInfoSize = 0;
DWORDdwVerHnd;
VS_FIXEDFILEINFO* pFileInfo;
//從資料庫中獲取最新軟體版本
try
{
sql.Format("select* from ToolVersionList where Enable = 1");
if(m_pRst->State)
m_pRst->Close();
m_pRst=m_pConnection->Execute((_bstr_t)sql,NULL,adCmdText);
if(!m_pRst->adoEOF)
{
var= m_pRst->GetCollect("MaintenanceTool");
csVer= (LPCTSTR)(_bstr_t)var;
}
if(m_pRst->State)
m_pRst->Close();
}
catch(_com_errore)
{
returnFALSE;
}
//獲取當前軟體版本
GetModuleFileName(NULL,szFullPath, sizeof(szFullPath));
dwVerInfoSize= GetFileVersionInfoSize(szFullPath, &dwVerHnd);
if (dwVerInfoSize)
{
HANDLE hMem;
LPVOID lpvMem;
unsignedint uInfoSize = 0;
hMem= GlobalAlloc(GMEM_MOVEABLE, dwVerInfoSize);
lpvMem= GlobalLock(hMem);
GetFileVersionInfo(szFullPath,dwVerHnd, dwVerInfoSize, lpvMem);
::VerQueryValue(lpvMem,(LPTSTR)_T("\\"), (void**)&pFileInfo, &uInfoSize);
WORDm_nProdVersion[3];
m_nProdVersion[0]= LOWORD(pFileInfo->dwProductVersionMS);
m_nProdVersion[1]= HIWORD(pFileInfo->dwProductVersionLS);
m_nProdVersion[2]= LOWORD(pFileInfo->dwProductVersionLS);
strVersion.Format(_T("%d.%d.%d"),m_nProdVersion[0],m_nProdVersion[1],m_nProdVersion[2]);
GlobalUnlock(hMem);
GlobalFree(hMem);
}
//版本對比
if(strVersion != csVer.Right(5))
{
AfxMessageBox("該軟體版本不是最新,請使用最新版本"+csVer+"!");
returnFALSE;
}
returnTRUE;
}
這個函式可以放在工程初始化連線好資料庫之後呼叫,實現對版本的控制,每次更新可以把版本加1,這樣可以確保在實際專案中使用的是最新的軟體,謝謝。
此文章只是個人在實際專案中所總結的一點小小經驗,程式碼不是非常的嚴謹,覺得有幫助的可以參考一下,覺得有問題的可以給我留言,便於我做出改善,大家相互學習。
相關文章
- MFC中獲取程式自身的版本資訊
- VC++ MFC UpdateData()用法C++
- MFC程式設計(五)C程式程式設計
- MFC程式設計(四)C程式程式設計
- MFC程式設計(二)C程式程式設計
- MFC程式設計(一)C程式程式設計
- MFC程式設計(六)C程式程式設計
- MFC程式設計(三)C程式程式設計
- MFC---ActiveX控制元件程式設計基礎控制元件程式設計
- VC++/MFC 教程1(英文) (轉)C++
- VC++/MFC 教程2(英文) (轉)C++
- VC++/MFC 教程3(英文) (轉)C++
- apache版本資訊控制Apache
- MFC下CSocket程式設計詳解程式設計
- MFC控制元件程式設計:列表控制元件、樹控制元件、屬性頁對話方塊 (未完)控制元件程式設計
- VC++、MFC、COM和ATL的區別C++
- VC++/MFC 教程4&5(英文) (轉)C++
- VC++/MFC 教程6&7(英文) (轉)C++
- 利用MFC程式設計在工具條中增加組合框控制元件 (轉)C程式程式設計控制元件
- MFC下CSocket程式設計詳解(轉)程式設計
- VC++串列埠通訊程式設計詳解C++串列埠程式設計
- VC++深入詳解(12):網路程式設計C++程式設計
- VC++視覺化程式設計第一個程式設計例項出錯C++視覺化程式設計
- VC++控制檯程式中使用定時器C++定時器
- VC++程式設計師成長--之必看書籍C++程式設計師
- 利用VC++程式設計實現程式自動啟動 (轉)C++程式設計
- MFC--網路程式設計之CAsyncSocket詳解程式設計
- VC++程式設計環境下的除錯步驟C++程式設計除錯
- Windows下的VC++動態連結庫程式設計WindowsC++程式設計
- No MFC 程式設計01 - 最精簡的 win32 程式 (轉)程式設計Win32
- 新手不能忽視的MFC程式設計之CStringC程式程式設計
- 服務API版本控制設計與實踐API
- Linux程式控制程式設計Linux程式設計
- 如何使用CMake生成Windows DLL版本控制資訊Windows
- MFC控制元件使用大全控制元件
- MFC控制元件精簡控制元件
- [原始碼和文件分享]基於VC++的MFC類庫的飛機大戰遊戲的設計與實現原始碼C++遊戲
- VC++串列埠程式設計之簡訊應用開發(轉)C++串列埠程式設計