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,这样可以确保在实际项目中使用的是最新的软件,谢谢。

         此文章只是个人在实际项目中所总结的一点小小经验,代码不是非常的严谨,觉得有帮助的可以参考一下,觉得有问题的可以给我留言,便于我做出改善,大家相互学习。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值