自动下载DIY
网络与通信
如今网上很多的软件都采用了自动下载、后台安装的方式。比如浏览Flash动画的插件,当检测到客户端没有安装该软件的时候,它就会自动启动下载功能,然后用户会看到一个安全证书认证的小窗口,确认之后,软件就在后台悄悄安装好了,用户也就可以正常地浏览动画了。我们在很多时候,也希望自己的网站/软件能够提供这样的功能,其实这个方法也并不神秘。
原理:这种自动下载功能,是Internet Explorer的5.X以上版本提供的一种基于Active X的方式。IE浏览器会通过网页里面的
1.选择文件
要安装的插件或者程序必然是由一个或者多个文件组成的,它可以是.exe可执行文件,也可以是.ocx、.dll等类型的文件。首先我们将要安装的文件准备好,最好存放在同一目录内,以便下一步的制作。为了方便读者理解,我们给出一个例子,在这个例子里面笔者选定了两个文件一个是test1.dll,准备安装到当前Windows的系统目录,另外一个是test2.dll,安装到/system目录。
2.制作.inf文件
.inf文件也就是安装配置文件。它指定了软件包内需要安装的文件和这些文件需要安装的目标目录,需要创建的程序组以及需要改动的注册表内容。绝大部分的安装程序都包含这类文件,受篇幅所限,本文也不可能完全剖析其结构、语法等方面,也就仅仅针对其在本文中的应用略谈一二。
普通的.inf文件一般分为几节(见(图1)):

需要重点说明的就是目标文件夹“DestinationDirs”一节,我们一般使用逻辑磁盘标示符(LDID),其中25表示Windows目录,11表示system目录。当然还有其他文件夹的标示符(见(图2))。

3.制作软件包
我们要将插件或者软件最终在网页上发布,还必须将它做成Windows的.cab压缩软件包。制作该软件包的工具IExpress在高版本的Windows里面已经提供,如果Windows版本不够高,可以在IE5安装程序中查找IEAK5.EXE或者IEAK5CD.EXE,执行该文件即可。
运行Iexpress程序,选择Create Compressed files only(Active Installs),这样制作出的即是.cab文件。接下来是软件包的命名,我们不妨命名为test.cab文件。然后再选取test1.dll、test2.dll、test.inf三个文件进行打包。这样就完成了软件包的制作。
4.进行数字签名
虽然我们做好了软件包,但是如果不用电子证书对它进行数字签名的话,它是不会通过用户端的安全检查的(除非安全级别设成“低”)。电子证书对我们来说并不陌生,不过如何获得可以对自己编写的软件签名的证书大家可能就不是太清楚了。首先我们要找到一个证书颁发机构。我们在IE的Internet选项中的“内容”→“证书”中可以看到IE缺省受信任的证书颁发机构,比如Thawte、UTN、Xcert等。我们当然可以向这些机构申请。不过申请一个电子证书每年都要向该机构交纳一定费用。如果并非商业上的需要,我们不妨去下载某些站点的测试证书或者免费证书(功能与正式证书相同,只是在时间上有限制)来使用,要注意的是一定要申请通用证书或者软件签名证书,否则的话就不能进行软件签名。
申请好了,证书会自动下载到你的计算机内。有了证书之后,我们就可以在IE的Ineternet选项中的“内容”→“证书”→“个人”中看到刚刚申请的个人证书。要对自己的软件包进行签名的话,光有证书还不够,还需要下载一个签名工具signcode.exe,这个工具在网上随处可下,大家搜索一下便知。
打开signcode工具,第一步就是选择要被签名的文件,我们当然选上已经做好的test.cab文件,然后再在选择证书的时候选上申请到的个人证书,然后再点“确定”就可以了。当然我们还可以设置时间戳记,这样可以保证证书的时间,提高安全性。
5.在网页上发布软件包
我们的终极目的当然就是要在网页上发布该软件或插件。需要使用的HTML元素是:
先将我们的操作中涉及的它的属性介绍如下:
clsid:生成的类在Windows中的编号,这里涉及部分Windows注册表知识,本文不再赘述。
codebase:指定需要下载的软件地址及其版本。
比如我们可以在网页中写入:
这里要提示大家的是,如果你并不清楚自己的软件应该设置成什么版本的时候,可以写上Version=-1,-1,-1,-1,这样就可以达到如果客户端没有该软件就下载,倘若下载过就忽略的目的。
最后,我们要做的就是体验自己的成果了。