青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

使用 Http 在線自動升級程序

作者:余延斌


下載源代碼


?開發背景
近幾日一些程序老要修改點小毛病,為避免每次都通知程序使用者,便有想做一個在線自動升級的程序。在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;
       }        
更新部分代碼
先通過 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);
       ...  
有關其它細節請參考源代碼。

作者信息
電子郵件:yybhz@126.com
作者主頁:http://yyb.yeah.net/

posted on 2006-06-20 18:55 楊粼波 閱讀(610) 評論(0)  編輯 收藏 引用 所屬分類: 文章收藏

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久在线视频| 久久综合九色综合欧美就去吻 | 999亚洲国产精| 在线精品视频免费观看| 国产真实乱子伦精品视频| 国产日韩欧美中文在线播放| 欧美人与禽猛交乱配视频| 欧美破处大片在线视频| 欧美日韩视频专区在线播放| 国产精品黄色| 黄色精品一二区| 亚洲精品乱码久久久久久| 一区二区三区波多野结衣在线观看| 亚洲视频在线一区| 久久国产精品久久久| 男女激情久久| 艳妇臀荡乳欲伦亚洲一区| 午夜亚洲福利在线老司机| 久久国产精品72免费观看| 欧美激情在线观看| 国产日韩欧美在线看| 亚洲国产一区二区精品专区| 一本色道久久综合亚洲二区三区| 欧美亚洲三级| 亚洲国产视频一区| 亚洲欧美日韩一区二区三区在线观看| 久久国产精品久久国产精品| 欧美精品在线免费观看| 国产午夜精品一区二区三区欧美 | 99精品久久久| 久久精品理论片| 欧美日韩精品一区二区三区四区| 国产一区二区三区在线观看免费视频| 91久久国产综合久久蜜月精品 | 国产精品久久久一本精品| 欧美精选在线| 国产精品xxxav免费视频| 红桃视频成人| 亚洲欧美成人在线| 亚洲激情在线观看| 久久久国产一区二区| 国产精品久久久亚洲一区| 亚洲国产欧美精品| 久久久久国产精品麻豆ai换脸| 亚洲人成高清| 久久精品99无色码中文字幕| 欧美天天在线| 在线亚洲国产精品网站| 亚洲第一天堂无码专区| 久久久爽爽爽美女图片| 国产亚洲精品成人av久久ww| 亚洲欧美日韩国产综合在线| 亚洲精品少妇网址| 欧美精品一区三区| 亚洲精品免费在线| 亚洲二区在线| 可以看av的网站久久看| 伊人成人在线| 美女视频黄免费的久久| 久久久久久97三级| 在线免费不卡视频| 嫩模写真一区二区三区三州| 久久激情五月丁香伊人| 国产在线日韩| 老司机凹凸av亚洲导航| 久久国产婷婷国产香蕉| 一区二区三区在线免费视频| 久久久国产精品亚洲一区| 久久se精品一区精品二区| 国产在线精品一区二区夜色| 老牛国产精品一区的观看方式| 久久精品五月婷婷| 亚洲高清在线观看| 亚洲国内欧美| 欧美日韩国产麻豆| 亚洲欧美文学| 久久激情网站| 99热免费精品| 亚洲综合大片69999| 国产一区日韩二区欧美三区| 久热国产精品| 欧美精品久久99| 午夜精品国产精品大乳美女| 欧美一级午夜免费电影| 亚洲风情亚aⅴ在线发布| 91久久久久久久久| 欧美新色视频| 欧美阿v一级看视频| 欧美精品久久99久久在免费线| 一本色道婷婷久久欧美| 亚洲综合视频网| 亚洲高清久久网| 亚洲网站在线播放| 亚洲福利国产精品| 99精品视频免费观看| 麻豆久久精品| 欧美大片在线观看一区| 激情综合激情| 日韩视频精品在线观看| 国产欧美精品日韩区二区麻豆天美 | 一本到高清视频免费精品| 国产精品亚洲人在线观看| 久久久久九九视频| 欧美日韩在线高清| 欧美一级二区| 欧美成人精品一区二区三区| 欧美在线在线| 欧美日韩亚洲综合在线| 欧美国产精品专区| 国产人妖伪娘一区91| 亚洲精品中文字| 精品不卡在线| 亚洲欧美国产一区二区三区| 在线视频中文亚洲| 米奇777在线欧美播放| 久久成人精品| 国产精品扒开腿爽爽爽视频 | 亚洲欧美日韩中文在线制服| 免费在线亚洲欧美| 久久综合导航| 国产一区二区精品在线观看| 一区二区三区视频在线| 亚洲精品在线一区二区| 久久久久天天天天| 久久露脸国产精品| 国产日韩欧美中文在线播放| 亚洲伊人网站| 亚洲欧美一区二区原创| 欧美系列亚洲系列| 一级成人国产| 亚洲欧美国产视频| 国产精品久久久久7777婷婷| 在线视频精品| 亚洲在线国产日韩欧美| 欧美日韩在线观看视频| 亚洲精品一二区| 99这里只有精品| 欧美精品在线极品| 亚洲人成毛片在线播放女女| 亚洲人午夜精品| 欧美啪啪一区| 亚洲免费观看| 午夜一区二区三视频在线观看| 国产精品视频成人| 午夜亚洲伦理| 欧美国产日韩一区二区在线观看| 亚洲高清在线| 欧美日本韩国一区| 99视频精品免费观看| 9久re热视频在线精品| 欧美日本精品一区二区三区| 在线中文字幕日韩| 欧美自拍偷拍午夜视频| 伊人久久大香线| 亚洲欧美中文日韩v在线观看| 亚洲免费电影在线观看| 欧美色一级片| 性欧美8khd高清极品| 欧美r片在线| 久久精品久久综合| 亚洲第一区在线| 欧美视频你懂的| 香蕉久久一区二区不卡无毒影院 | 麻豆av一区二区三区| 亚洲国产另类 国产精品国产免费| 一本色道久久综合亚洲精品婷婷 | 亚洲日本久久| 亚洲欧美日韩综合一区| 黄色影院成人| 欧美日韩精品高清| 欧美一区亚洲| 日韩午夜高潮| 麻豆91精品| 亚洲女人小视频在线观看| 国内外成人免费激情在线视频 | 国产亚洲成av人片在线观看桃| 久久综合久久久| 亚洲系列中文字幕| 亚洲高清视频中文字幕| 香蕉久久精品日日躁夜夜躁| 亚洲国产精品v| 国产精品久久久免费| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲无线观看| 亚洲国产精品一区二区www| 久久精品视频免费播放| 亚洲天堂av图片| 亚洲精品乱码久久久久久按摩观| 国产亚洲电影| 国产精品久久二区| 欧美大香线蕉线伊人久久国产精品| 午夜视频一区二区| 亚洲无亚洲人成网站77777| 亚洲日本电影| 亚洲二区三区四区| 欧美成人精品在线播放| 久久久另类综合| 欧美一区二区私人影院日本| 亚洲一区二区欧美日韩| 一本色道88久久加勒比精品|