使用 Http 在线自动升级程序
2006-07-21 11:14:54 来源:WEB开发网本文示例源代码或素材下载
开发背景
近几日一些程序老要修改点小毛病,为避免每次都通知程序使用者,便有想做一个在线自动升级的程序。在VCKBase看到一个是使用 FTP 的,想到 FTP 需要用户名密码,许多程序如KFW 防火墙都能监看到程序发送的数据包,为防止密码泄露,故自己选用Http来做更新。我的思路是用命令行传递程序名称、版本号和 Update.ini 配置文件的 URL。命令行用法如下: update.exe 程序名 版本 版本文件URL
解析命令行参数的函数原型如下:
例如:
update.exe VolleyMail 3.0 http://www.extice.com/update/update.iniCUpdateApp::GetCmdLinePara(CStringArray ¶Arr);
该函数是将命令行参数分解并保存到 paraArr 数据中。然后将命令行信息传递给主对话框类,代码如下: dlg.m_strSoft = arr.GetAt(0);
这是对话框的初始化,将软件版本号显示在 List 框中,如图一:
dlg.m_strVersion = arr.GetAt(1);
AfxParseURL( arr.GetAt(2),
dwType,
dlg.m_strServer,
dlg.m_strIniPath,
dlg.m_dwPort);
m_cis.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT,5);
m_pHttp=m_cis.GetHttpConnection( m_strServer,m_dwPort );
m_lbProduct.AddString(m_strSoft+" "+m_strVersion);
图一
然后是查找可用的更新,先通过 ChttpFile 将 Update.INI 文件下载到系统临时目录下,然后调用 GetPrivateProfileString 读取网上最新的版本号以及要更新的文件,判断是否需要更新,部分代码: csf.Open( m_strTempDir+"\\update.ini",
更新部分代码
CFile::modeCreate|CFile::modeWrite|CFile::typeBinary );
char buf[2048];
int n;
while( ( n=pFile->Read( buf,2048 ) ) > 0 )
csf.Write(buf,n);
char buf[128];
::GetPrivateProfileString( m_strSoft,
"VERSION",
"1.0",
buf,
sizeof(buf),
m_strTempDir+"\\update.ini");
m_strNewVer=buf;
if(atof( m_strVersion ) >= atof( buf ) ) //现有版本大于
{
m_strStatus = "您现在用的版本已是最新的!";
UpdateData(FALSE);
m_buOK.EnableWindow(FALSE);
return;
}
更多精彩
赞助商链接