WEB开发网
开发学院软件开发VC 使用 Http 在线自动升级程序 阅读

使用 Http 在线自动升级程序

 2006-07-21 11:14:54 来源:WEB开发网   
核心提示:本文示例源代码或素材下载 开发背景近几日一些程序老要修改点小毛病,为避免每次都通知程序使用者,使用 Http 在线自动升级程序,便有想做一个在线自动升级的程序,在VCKBase看到一个是使用 FTP 的,先通过 ChttpFile 将 Update.INI 文件下载到系统临时目录下,然后调用 GetPrivat

本文示例源代码或素材下载

开发背景

近几日一些程序老要修改点小毛病,为避免每次都通知程序使用者,便有想做一个在线自动升级的程序。在VCKBase看到一个是使用 FTP 的,想到 FTP 需要用户名密码,许多程序如KFW 防火墙都能监看到程序发送的数据包,为防止密码泄露,故自己选用Http来做更新。我的思路是用命令行传递程序名称、版本号和 Update.ini 配置文件的 URL。命令行用法如下: update.exe 程序名 版本 版本文件URL
例如:
  update.exe VolleyMail 3.0 http://www.extice.com/update/update.ini
解析命令行参数的函数原型如下:CUpdateApp::GetCmdLinePara(CStringArray ¶Arr);该函数是将命令行参数分解并保存到 paraArr 数据中。然后将命令行信息传递给主对话框类,代码如下: dlg.m_strSoft = arr.GetAt(0);
    dlg.m_strVersion = arr.GetAt(1);
    AfxParseURL( arr.GetAt(2),
          dwType,
          dlg.m_strServer,
          dlg.m_strIniPath,
          dlg.m_dwPort);
   
这是对话框的初始化,将软件版本号显示在 List 框中,如图一: 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;
    }    
更新部分代码

1 2  下一页

Tags:使用 Http 在线

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接