工控编程吧
标题:
407上位机VC MFC实现软件联网更新
[打印本页]
作者:
qq263946146
时间:
2016-9-15 13:18
标题:
407上位机VC MFC实现软件联网更新
(, 下载次数: 1)
上传
点击文件名下载附件
实现软件联网更新
功能展示
程序都有更新需要,我们当前例程实现联网更新程序功能,效果如图,点击<检查更新程序>例程会从服务器下载版本文件读取信息并与本地文件内的版本对比,需要更新则下载服务器版本文件内的全部文件到根目录Temp文件夹内并显示下载进度。下载完成会调用Temp文件夹下MoveFile程序执行新文件的更换
要点提示
文件更新流程大致为:点击<检查更新程序>按钮调用CheckVersion()函数从服务器下载版本文件读取版本与本地的文件进行版本对比,需要更新则启动一线程ThreadProc() 通过函数GetUpdateFileInfo()读取版本文件内全部要下载更新的文件,通过DownLoadFile()将文件全部下载。下载完成最后会调用RefreshVersion()更新本地的版本文件退出例程,及启动根目录Temp下MoveFile.exe程序执行文件的新旧替换;
例程主要添加的自定义函数有double CheckVersion();/用以检查是否有新版本
void DoUpdate();//执行文件更新,例程中由线程调用执行;
void GetUpdateFileInfo();//获取要更新的文件名及下载地址保存在成员变量m_mapFile里;
BOOL DownloadFile(UINT nNumber,CString &strName,CString &strUrl);//下载文件并显示进度在列表框内
BOOL DownLoadFile(CString &strUrl);//下载文件到程序根目录Temp文件夹里;
void RefreshVersion();//刷新当前软件版本信息文件,关闭程序并调用Temp文件夹里的程序MoveFile.exe
实现功能
1.新建基于对话框的应用程序
2.复制根目录下载用文件HttpSocket.cpp, HttpSocket.h到例程工程目录,并加载到工程,在stdafx.h添加头文件#pragma warning(disable:4786) #include <vector> #include <map>using namespace std;
#include <io.h> #include "HttpSocket.h“
3.添加列表框关联变量CListCtrl m_listFile;用于显示下载进度。添加<检查更新程序>按钮关联函数实现程序更新
void CGkbc8Dlg::OnCheck()
{
CString sText;
double dbCheck=0;
dbCheck = CheckVersion();
if(dbCheck>0)
{
sText.Format("已检测到新版本:%0.3f,是否更新",dbCheck);
if(IDYES != MessageBox(sText,"提示",MB_YESNO) )
return;
}
else if(dbCheck==0)
{
MessageBox("已是最新版本,无需更新");
return;
}
else//出错
{
sText.Format("检查出错,代码: %0.0f",dbCheck );
MessageBox(sText,"提示");
return;
}
AfxBeginThread(ThreadProc,this);
}
4.添加线程函数ThreadProc()及自定义的其他函数,并在程序初始化初始化列表控件
UINT ThreadProc( LPVOID pParam )
{
CGkbc8Dlg* pDlg = (CGkbc8Dlg*) pParam;
ASSERT(pDlg);
pDlg->DoUpdate();
return 0;
}
public:
double CheckVersion();//检查是否有新版本
void DoUpdate();//执行更新(被线程调用)
private:
void GetUpdateFileInfo();//获取要更新的文件名及下载地址
BOOL DownloadFile(UINT nNumber,CString &strName,CString &strUrl);//下载文件
BOOL DownLoadFile(CString &strUrl);//下载文件
void RefreshVersion();//刷新当前软件版本信息
map<CString,CString> m_mapFile; //保存需要更新的文件信息
m_listFile.ModifyStyle(0,LVS_REPORT,NULL);
m_listFile.SetExtendedStyle(LVS_EX_FLATSB|LVS_EX_FULLROWSELECT
|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE|LVS_EX_GRIDLINES);
m_listFile.InsertColumn(0,"文件名",LVCFMT_LEFT,100,0);
m_listFile.InsertColumn(1,"大小",LVCFMT_LEFT,70,0);
m_listFile.InsertColumn(2,"进度",LVCFMT_LEFT,100,0);
5.最后复制根目录下Temp文件夹进行测试,文件夹内MoveFile.exe的工程源代码对应根目录文件MoveFile.zip
我们来演示下功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/c65514df46dd2c5031bf0217b1735b1b/0/0/w_19rswzdizp.swf-albumId=6288556809-tvId=6288556809-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 3)
上传
点击文件名下载附件
[weixinlianxi]1[/weixinlianxi]
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4