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

使用 Http 在线自动升级程序

 2006-07-21 11:14:54 来源:WEB开发网   
核心提示: 先通过 CUpdateDlg::FindAppProcessID() 看要更新的程序是否在运行:DWORD CUpdateDlg::FindAppProcessID() { HANDLE handle=::CreateToolhelp32Snapshot(TH32CS_SNAPALL,0)

先通过 CUpdateDlg::FindAppProcessID() 看要更新的程序是否在运行:DWORD CUpdateDlg::FindAppProcessID()
    {
    HANDLE handle=::CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
      PROCESSENTRY32 Info;
    Info.dwSize = sizeof(PROCESSENTRY32);
    if(::Process32First(handle,&Info))
    {
        do{
           CString ss=Info.szExeFile;
           if(!ss.CompareNoCase(m_strSoft+".exe"))
           {
              ::CloseHandle(handle);
              return Info.th32ProcessID;
           }
       }
       while(::Process32Next(handle,&Info));
         ::CloseHandle(handle);
    }
      return -1;
    } 
该函数返回程序进程号,如果要更新的程序正在运行的话,提示人工退出否则用TerminateProcess 杀掉进程!下载的文件大小用:pFile->QueryInfo(HTTP_QUERY_CONTENT_LENGTH,str);取得。为防止下载一半网络出现故障,先将下载的文件加后缀名.upg,下载全部成功后替换掉原来在用的程序,完成更新。

关键代码部分如下:...
          
       CStdioFile csf;
       if( !csf.Open( str+".upg",
               CFile::modeCreate
              | CFile::modeWrite
              | CFile::typeBinary
              | CFile::shareDenyWrite ) )
       {//先为*.upg文件
           AfxMessageBox("写文件"+str +"错误!\n文件正在使用中,请先关闭程序!",
                  MB_ICONSTOP);
           pFile->Close();
           return FALSE;
       }
       
       char buf[2048];
       DWORD dwRead=0;
       while((n=pFile->Read(buf,sizeof(buf)))>0)
       {
           dwRead+=n;
           m_prog.SetPos(100*dwRead/dwLen);
           MSG msg;
           for(int i=0;i<10;i++)
           {
              if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
              {
                  TranslateMessage(&msg);
                  DispatchMessage(&msg);
              }
           }
           csf.Write(buf,n);
       }
       pFile->Close();
    ...
    if(::DeleteFile(str)){
       ::rename(str+".upg",str);
       m_strStatus=strFile+"完成更新!";
       UpdateData(FALSE);
    ... 
有关其它细节请参考源代码。

上一页  1 2 

Tags:使用 Http 在线

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