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中獲取程式自身的版本資訊
- MFC---ActiveX控制元件程式設計基礎控制元件程式設計
- MFC程式設計(六)C程式程式設計
- MFC程式設計(一)C程式程式設計
- MFC程式設計(二)C程式程式設計
- MFC程式設計(三)C程式程式設計
- MFC程式設計(四)C程式程式設計
- MFC程式設計(五)C程式程式設計
- VC++、MFC、COM和ATL的區別C++
- MFC下CSocket程式設計詳解(轉)程式設計
- VC++視覺化程式設計第一個程式設計例項出錯C++視覺化程式設計
- VC++程式設計師成長--之必看書籍C++程式設計師
- MFC--網路程式設計之CAsyncSocket詳解程式設計
- 新手不能忽視的MFC程式設計之CStringC程式程式設計
- VC++程式設計環境下的除錯步驟C++程式設計除錯
- VS2019/MFC程式設計入門之(如何利用MFC嚮導生成單文件應用程式框架)C程式程式設計框架
- [原始碼和文件分享]基於VC++的MFC類庫的飛機大戰遊戲的設計與實現原始碼C++遊戲
- 如何使用CMake生成Windows DLL版本控制資訊Windows
- 服務API版本控制設計與實踐API
- Java面向資料程式設計1.1版本Java程式設計
- OCX 控制元件主動傳送訊息給 MFC 視窗訊息控制元件
- git版本資訊注入go程式GitGo
- MFC NumericUpDown Spin控制元件 CSpinButtonCtrl控制元件
- Git程式碼版本控制流程Git
- 可程式設計作息時間控制器設計程式設計
- MFC訊息對映
- GUI程式設計--班級資訊收集系GUI程式設計
- GUI程式設計--班級資訊收集系..GUI程式設計
- MFC vc++ 中CTreeContrl如何自定義實現滑鼠單擊或雙擊響應事件 ,即重寫類似於控制元件的響應事件或訊息C++事件控制元件
- Rust 程式設計視訊教程對應講解內容-流程控制Rust程式設計
- GUI程式設計--班級資訊收集系6.3GUI程式設計
- 可程式設計序控制器(PLC)程式設計
- MFC 程式基本介面配置
- 好程式設計師大資料教程分享大資料之流程控制程式設計師大資料
- 為QT程式增加版本等屬性資訊QT
- Go程式設計技巧–Goroutine的優雅控制Go程式設計
- MFC功能擴充套件控制元件BCGSuite for MFC釋出v27.1|附下載套件控制元件UI
- 網路通訊程式設計程式設計