WEB开发网
开发学院软件开发VC 基于 Web 的程序版本检查 阅读

基于 Web 的程序版本检查

 2006-07-21 11:09:14 来源:WEB开发网   
核心提示: 有了 CInternetHandle 类,一切都便得简单明了;ReadVersion 只需在最后检查出错情况,基于 Web 的程序版本检查(4),当控制流离开函数时,C++会自动关闭所有的 CInternetHandles,因此,要想用户界面的响应速度够快,MFC 程序员可能会问,MFC
  有了 CInternetHandle 类,一切都便得简单明了;ReadVersion 只需在最后检查出错情况。当控制流离开函数时,C++会自动关闭所有的 CInternetHandles。

MFC 程序员可能会问,MFC 都已经具备了 WinInet 封装类,为什么不用现成的东东,而要自己再做一个 CInternetHandle,原因很简单:为了使用区区几行代码而加载整个 MFC 是非常浪费资源的。谁都知道,代码越少越好。再者,不让 CWebVersion 依赖于 MFC 是明智之举。非 MFC 应用也能使用 CWebVersion 岂不是更好!不用担心用户是否加载了最新的DLLs。开发基于Web的应用尤其如此。

图二 更新程序版本的对话框

为了进一步示范 CWebVersion 的使用,我写了一个对话框程序,如图二所示,每次启动程序时,都会对版本进行检查,读取新版本数据是在 InitInstance()函数中进行的: // 从 Web 读取当前版本号
  if (CWebVersion::Online()) {
    CWebVersion ver(_T("pub.chinafsdu.net"));
    if (ver.ReadVersion(_T("version.txt"),_T("pub"),_T("pub")))
      m_dwNewVersion = ver.dwVersionMS;
  }
  将读取的版本号存储在 m_dwNewVersion 数据成员中,这里例子程序使用在32位的版本号。接着在对话框的 OnInitDialog() 例程中对版本号进行比较,当前的版本号存储在程序的 VS_VERSION_INFO 资源中,这个信息在编译程序时就已经产生了,获取它很容易,参见另外一个C++类:CMyVersionInfo。通过比较: // 比较当前的程序版本与最新的程序版本
  if (App.m_dwNewVersion && vi.dwProductVersionMS < App.m_dwNewVersion) {
    // current version is newer: display link
    s.Format(_T("更新版本 %d.%02d"),
      HIWORD(App.m_dwNewVersion),LOWORD(App.m_dwNewVersion));
    m_wndVerChkLink.SetWindowText(s);
  } else {
    // current version not available: hide link
    m_wndVerChkLink.ShowWindow(SW_HIDE);
  }
  如果Web版本较新,则对话框显示一个“更新版本 XXX”链接(如图二所示),否则隐藏链接,什么也不显示。在程序启动时用FTP读取10个字节的文件应该是很快的,但实际情况往往与想象的并不一样,对话框的显示总是会有一个延时,延时的长短要看FTP服务器的位置以及繁忙状态。因此,要想用户界面的响应速度够快,可以考虑在单独的线程进行文件的下载。

上一页  1 2 3 4 

Tags:基于 Web 程序

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