Web版本检查以及为应用程序添加声音效果

在 2003 四月的专栏文章中,你描述了如何实现一个叫 CWebVersion 的类,用它可以存取网络上的某个文件来检查软件的版本,当版本过期后提示用户更新程序。你的实现使用 FTP 来下载文件,但我的站点的 ISP 不允许使用匿名 FTP 连接,只能通过用户和口令登陆。我能不能用 HTTP 来代替 FTP,将版本文件作为 Web 页面下载。

如果没读过 2003 四月的专栏文章,我在这里简单介绍一下 CWebVersion 类,它是我编写的一个用来比较程序版本号的类,版本号文件存储在 Web 上。我在 TraceWin 程序中就是使用这个类来通知用户何时有新版本下载的。

没错,你可以用 HTTP;但不必转换文件。在我原来的实现中确实应该使用 HTTP,因为 HTTP 比 FTP 使用的更加广泛。许多 Web 服务提供商出于安全的原因都不允许匿名的 FTP 访问,但对于文件传输来说,FTP 效率更高(这也是我用 FTP 的原因),HTTP 对于获取简单的文本文件不错。

CWebVersion 读取文本文件,文件中的版本数据用逗号分割成四部分:高/低位的主/次版本号。使用方法是这样的:

if (CWebVersion::Online()) {
  CWebVersion webver("www.mysite.com");
  if (webver.ReadVersion("myversion.txt")) {
    // dwVersionMS and dwVersionLS now
    // hold the version numbers
  }
}

静态成员函数 CWebVersion::Online 调用 ::InternetQueryOption, 用 INTERNET_OPTION_CONNECTED_STATE 作为参数,以便检查此电脑是否连接到 Internet。如果已经连接,那么 CWebVersion::ReadVersion 便从你的 Web 网站读取版本文件。接着你可以将读取到的版本号与应用程序中编译的版本号进行比较,这个版本号通常在 VERSIONINFO 或 DllGetVersion 资源中(详情参见:“如何获取某个动态链接库的版本信息”)。原来的 CWebVersion 使用 FTP 来获取文件;本文我改为使用 HTTP 来处理。使用 MFC 的 Wininet 类,在 Web 上通过 HTTP 读取文件很容易:

// in CWebVersion::ReadVersion
CInternetSession session(_T("MySession"));
CHttpConnection* pConn =
session.GetHttpConnection("www.dilascia.com",INTERNET_DEFAULT_HTTP_PORT);
CHttpFile* pFile =
pConn->OpenRequest(CHttpConnection::HTTP_VERB_GET, "TraceWinVer.txt");
pFile->SendRequest();

上面的代码意图是想下载文件 www.dilascia.com/TraceWinVer.txt。 在调用了 SendRequest 之后,你可以调用 CHttpFile::QueryInfoStatusCode 来获取状态吗——例如,文件没找到的状态码是 404,200 表示成功(完整的状态码列表参见 wininet.h 头文件)——接着调用 CHttpFile::Read 将文件读入你的缓冲,这个工作由 CWebVersion::ReadVersion 完成,然后调用 scanf ,根据 “Mhi,Mlo,mhi,mlo” 格式解析文件内容,此处 Mhi,Mlo,mhi,mlo 分别代表主版本和次版本号的高位和低位字(WORDs)。CWebVersion 将这些信息保存在 CWebVersion::dwMajorVersion 和 CWebVersion::dwMinorVersion 中。完整的代码参见 Figure 1。

为了测试 CWebVersion,我写了一个程序 GetVersion.exe(参见 Figure 2),当我在我自己的网站上首次测试 CWebVersion 时,我将版本文件命名为 TraceWinVer.dat。虽然文件已经到位,但下载时报404错误(文件不存在)。开始我以为必须在请求头中添加 .dat 接受文件类型:

static LPCTSTR MyHeaders = _T("Accept: text/dat\r\n");
...
pHttpFile->AddRequestHeaders(MyHeaders);

Figure 2 测试程序

时间: 2024-12-24 02:38:02

Web版本检查以及为应用程序添加声音效果的相关文章

基于Web的程序版本检查

现在的很多程序都可以通过 Internet 进行版本更新,Windows 操作系统本身的"Windows Update"就是一个典型的例子.要实现这种特性,首先必须对应用程序的版本进行检查.那么如何通过 Internet 对自己的程序进行版本检查呢?本文将通过实际的例子程序来示范实现细节. 在进入正题之前,我想先罗嗦几句,说说与此文内容有关的个人好恶:我很讨厌程序显示那些必须让用户干预的消息框,这种消息框很烦人,尤其是问你要不要更新的那种对话框.碰到这种情况我总是回答"No&

aspnet-asp.net web应用程序 添加一个外部类 访问asp.net页面里的一个txtbox,然后赋值!

问题描述 asp.net web应用程序 添加一个外部类 访问asp.net页面里的一个txtbox,然后赋值! 外部类 如何访问asp.net页面里的一个控件 添加一个外部类 访问asp.net页面里的一个txtbox,然后赋值! 解决方案 用一个public的变量呢

一分钟了解阿里云产品:弹性Web托管如何上传网站程序

弹性Web托管是阿里云推出的新一代建站主机,基于先进的容器技术架构,资源隔离性好,且具有攻击隔离能力,更稳定.安全,带配套控制面板,管理体验同虚机一样简单.     今天我们来说说弹性Web托管怎样上传网站程序?   上传网站文件分为三步,打包压缩.上传与解压缩,下面我们来具体说明一下详细的操作:   一.将所有需要上传的文件打成压缩包.   1.进入源代码文件夹,将所有的文件和文件夹选中,选择"添加到压缩文件".   这里我要说的是,选中所有文件而非选中上一级的文件夹再打包的好处是,

windows中将绿色程序添加到鼠标右键

windows中将绿色程序添加到鼠标右键 1.绿色软件是很多人的最爱,但是也有一些问题,需要我们来解决,那就是如何将常用的软件添加到鼠标右键,比如,notepad++绿色版的软件,我们想让她能够出现在鼠标右键中,这样当我们遇到一个文件想用notepad++打开时,只要用鼠标右键就可以直接打开了. 2.下面介绍如何把一个程序添加到鼠标右键.主要就是修改注册表来实现的. Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT*shell] [H

在Windows 下把绿色程序添加到鼠标右键的方法

第一.绿色软件是很多人的最爱,但是也有一些问题,需要我们来解决,那就是如何将常用的软件添加到鼠标右键,比如,notepad++绿色版的软件,我们想让她能够出现在鼠标右键中,这样当我们遇到一个文件想用notepad++打开时,只要用鼠标右键就可以直接打开了. 第二.下面介绍如何把一个程序添加到鼠标右键.主要就是修改注册表来实现的. Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT*shell] [HKEY_CLASSES_ROOT*sh

在Unicode版Inno Setup中使用ISSkin给安装程序添加皮肤

原文 http://www.cnblogs.com/2356/archive/2009/10/27/1590565.html 在Unicode版Inno Setup中使用ISSkin给安装程序添加皮肤 ISSkin是Code jock 公司出品的Inno Setup 皮肤插件,用于为Inno制作的安装程序提供皮肤功能. 自Delphi发布2009之后,Inno Setup 开始出现支持Unicode编码的版本,即5.3.x系列,并且官方同时提供Ansi和Unicode版本. 如果了解Delphi

安装程序添加iis的方法经验分享

原文:安装程序添加iis的方法经验分享 网上有一些这样的方法,但我这里主要做一些对比和扩充 网上这方面的文章的岁数比较大,server 08R2和win7出来后,整理这方面的资料的文章没找到,所以这里将我的经验跟大家分享下 首先说下08R2,08R2和win7附带的iis的版本是7.5,而之前的server08和vista附带的版本是7.0. 这里主要说3个命令的区别:在上述系统中添加iis一般离不开这几个命令:pkgmgr,servermanagercmd,dism 我东拼西凑然后实践证明:7

php 集成环境-我想问下php的集成环境的php版本和安装的php程序版本之间怎么样才能使用呢?

问题描述 我想问下php的集成环境的php版本和安装的php程序版本之间怎么样才能使用呢? 我想问下php的集成环境的php版本和安装的php程序版本之间怎么样才能正常使用呢?就是说哪个版本高一些 解决方案 可以参考下这篇文章http://blog.csdn.net/oneym/article/details/48050487 解决方案二: wamp集成环境下升级php版本集成的PHP环境的使用Linux环境Nginx安装多版本PHP

Windows Phone实用教程:利用Blend为程序添加设计时数据

Blend自诞生那一天起就伴随这开发者如此的评价: 有VS还用Blend干啥,直接码代码就好了. Blend会生成一堆垃圾无用代码,很不爽. 对于这类我只会在心里评价,当你并不真正了解一样事物的情况下,就给这个东西扣帽子,实在很不公平. 作为程序员首先要明白时间的宝贵和效率的重要性,更应了解各种效能工具,Blend便是其中一个,如果你仍然觉得学怎么用Blend纯粹是浪费时间, 那么恭喜你,后面的文章可以忽略了:-) [本文讲述的内容] 使用blend为程序添加设计时的数据. [本文适用的场景]