上位机MFC软件在线升级实例源代码
我们软件编写发布后,都要进行更新升级。
一般如QQ,微信都支持在线升级功能。
当前这个例程也实现类似功能,
运行例程,
选择界面的连接地址,
可以点击确认升级程序。
升级按钮会新开一个线程来实现升级相关工作。
例如如下:
- UINT UpdateMyProgram(LPVOID v)
- {
- CMyUpdateDlg *dlg=(CMyUpdateDlg *)AfxGetApp()->GetMainWnd();
- //得到本程序路径
- CString strFilePath;
- strFilePath=dlg->pMyFun->GetFileFullPath();
-
- BOOL bErrorSign;
- bErrorSign=FALSE;
- int iPos_U;
- CString strPath,strOutLocal;
- iPos_U=strFilePath.Find("MyUpdate.exe");
- strPath=strFilePath.Mid(0,iPos_U);
- //得到本地客户端程序的保存位置/路径
- strOutLocal.Format("%s%s",strPath,_T("MyClient.exe"));
- //检测新版本,如果发现新版本,则升级
- CString NewVersion,strUpdateUrl,OldVersion,strUrl,strInfo,strOutUrl;
- //本软件的版本号
- OldVersion=_T("1.0.0.1");
- // dlg->m_IDC_UPDATEURL01.GetLBText(m_IDC_UPDATEURL01.GetCurSel(),strUrl);
- strUrl=dlg->m_strUpdateUrl;
- //得到新版本相关资料
- dlg->m_IDC_STATIC_UPDATE.SetWindowText(_T("正在检测新版本..."));
- strInfo=dlg->pMyFun->InternetGetInfo(strUrl);
- if(strInfo!=_T("Error"))
- {
- //得到版本号及升级地址
- int iPos1,iPos2,strLen;
- strLen=strInfo.GetLength();
- iPos1=strInfo.Find("#");
- iPos2=strInfo.Find("#",iPos1+1);
- NewVersion=strInfo.Mid(iPos1+1,iPos2-iPos1-1);//版本号
- iPos1=iPos2;
- iPos2=strInfo.Find("#",iPos1+1);
- strUpdateUrl=strInfo.Mid(iPos1+1,iPos2-iPos1-1);//升级地址
- //比较新旧版本
- if(dlg->pMyFun->TestVersion(OldVersion,NewVersion))
- {
- dlg->m_IDC_STATIC_UPDATE.SetWindowText(_T("正在下载新版本..."));
- dlg->pMyFun->InternetGetFile(strUpdateUrl,strOutLocal);
- }else
- {
- bErrorSign=TRUE;
- }
- }else
- {
- bErrorSign=TRUE;
- }
- if(bErrorSign)
- dlg->m_IDC_STATIC_UPDATE.SetWindowText(_T("更新失败,请检测网络是否正常!"));
- else
- dlg->m_IDC_STATIC_UPDATE.SetWindowText(_T("您的程序已经升级为最新版本!"));
- dlg->m_IDC_UPDATEURL01.EnableWindow(TRUE);
- dlg->GetDlgItem(IDC_STATIC_UPDATE)->ShowWindow(SW_SHOW);
- dlg->GetDlgItem(IDC_PROGRESS1)->ShowWindow(SW_HIDE);
- dlg->GetDlgItem(IDC_UPDATE)->ShowWindow(SW_SHOW);
- AfxEndThread(0);
- return 0;
- }
复制代码 附件含两部分内容
1) update文件夹下为服务器所用文件.
2) MyUpdate为客户端所用文件源程序.
下载地址:
上位机VC MFC程序开发精典实例大全源码与视频讲解配套下载408例 经历1年的编程与录制点击进入查看
|