正在阅读:软件的版本更新检查实现软件的版本更新检查实现

2004-11-01 15:25 出处:CSDN 作者:Raptor 责任编辑:linjixiong


  //---------------------------------------------------------------------------
  //  TGetNewVersionThread
  //---------------------------------------------------------------------------
  void __fastcall TGetNewVersionThread::Execute( )
  {
  boost::scoped_ptr webConn( new TIdHTTP( NULL ) );
  boost::scoped_ptr ss( new TStringList( ) );
  try {
  ss->Text = webConn->Get( FURL );
  }
  catch ( ... )
  {
  ss->Text = "";
  }
  AnsiString s = ss->Values["piapg"];
  if ( s != "" )
  FVer->VerStr = s;
  }
  //---------------------------------------------------------------------------

  这段代码很简单:创建一个线程,在线程里创建一个TIdHTTP实例,然后下载URL对应的文件,最后从中读出“piapg”的版本号。为了偷懒,我用了boost库里的smart pointer--scoped_ptr。

  这个线程类的使用方法如下:


  //---------------------------------------------------------------------------
  //  在程序启动时执行:
  if ( PIAPGCfg->AutoUpd )  //  如果选择了“检查更新”选项则执行检查
  {
  if ( SplashDlg )  //  如果有splash,则在其中显示提示文本
  {
  SplashDlg->labProgress->Caption = "正在检查新版本...";
  SplashDlg->labProgress->Refresh( );
  }
  //  创建检查新版本的线程
  TGetNewVersionThread * pThread = new TGetNewVersionThread( "http://mental.mentsu.com/update.txt" );
  pThread->OnTerminate = GetNewVersionDone;
  pThread->Resume( );
  }
  //---------------------------------------------------------------------------
  //  版本文件下载完成或超时
  void __fastcall TMainForm::GetNewVersionDone(TObject * Sender)
  {
  TGetNewVersionThread * pThread = dynamic_cast( Sender );
  boost::scoped_ptr fv( new TMFileVersion( ) );
  fv->GetVersionFromFile( Application->ExeName );  //  读取当前程序的版本
  if ( ( pThread->Version->Compare( fv.get( ) ) > 0 )  //  如果有新版本,则提示
  && ( Application->MessageBox( "发现更新版本的程序,是否现在更新?",
  "新版本检查", MB_YESNO | MB_ICONINFORMATION ) == IDYES ) )
  {
  ShellExecute( NULL, "open", "http://mental.mentsu.com", NULL, NULL, SW_SHOW );
  PostQuitMessage( 0 );
  }
  }
  //---------------------------------------------------------------------------

  此代码的功能详见其中的注释。

  再来看第二个问题:程序版本的问题。

  在上面的代码中,用到了一个类:TMFileVersion。这是我以前用DELPHI写的一个用于处理可执行文件版本号的类。实现代码如下:


  TMFileVersion = class
  private
  FMajor   : Integer;
  FMinor   : Integer;
  FRelease : Integer;
  FBuild   : Integer;




察看评论详细内容 我要发表评论
作者笔名简短内容 发表时间
:

键盘也能翻页,试试“← →”键

相关文章

关注我们

最新资讯离线随时看 聊天吐槽赢奖品