【转】在客户端自动下载插件或程序
起因:
很多网站设计者都希望在客户访问时在客户端自动安装一个插件或程序,以达到各种特效。
解决方案:
这种自动下载功能,是Internet Explorer的5.X以上版本提供的一种基于Active X的方式。IE浏览器会通过网页里面的<object>标签所标示的软件名称以及版本,检测当前系统中是否装有该软件,若装了,则检测版本是否比它老,当当前系统中没有该软件或者版本不够新时,IE就会自动安装该软件,当然在安装软件之前,它会有一个安全认证的过程。
实现步骤:
1.选择文件
要安装的插件或者程序必然是有一个或者多个文件组成的,它可以是.exe可执行文件,也可以是.ocx、.dll等类型的文件。首先我们要安装的文件准备好,最好存放在同一目录内,以便下一步的制作。我在这里选定了个文件做演示,test.dll,准备安装到当前windows的系统目录。
2.制作.inf文件。
.inf文件也就是安装配置文件。它指定了软件包内需要安装的文件和这些需要安装的目标目录,需要创建的程序组以及需要改动的注册表内容。绝大部分的安装程序都包含这类文件。
普通的.inf文件一般分为几节。见表1
[Version] 用于确认.inf文件的基本版本信息
[DefaultInstall] 默认情况下,会执行的一节。包含指向其他节的指针,该节可用于指定要复制和删除的文件、注册表的更新、.inf文件的更新等。
[DestinationDirs] 指定硬盘上复制、删除或重命名节文件的位置(列如\windows或windows\system)。
[fileCopy/Delete/RenameSection(s)] 列出要复制、删除或重命名的文件。
[Strings] 列出上面所使用的可本地化字符串。
表1
需要重点说明的就是目标文件夹“DestinationDirs”一节,我们一般使用逻辑磁盘标示符(LDID),其中25表示system目录,其他见表2
00 Null LDID-可用于创建新的LDID
01 Source Drive:\pathname
10 Machine文件夹(在基于服务器的安装时,映射windows文件夹)
11 System文件夹
12 IOSubsys文件夹
13 Command文件夹
17 Inffolder
18 Help文件夹
20 Fonts
21 Viewers
22 VMM32
23 Color文件夹
24 包含windows文件夹的驱动器根目录
25 windows文件夹
26 windows的约定引导设备(Winboot)
28 Host Winboo
30 启动盘的根文件夹
31 虚拟启动盘的主驱动器根文件夹
表2
3.制作软件包
我们要将插件或者软件最终在网页上发布,还必须将它做成windows的.cab压缩软件包。制作该软件包的工具IExpress在高版本的windows里面已经提供,如果windows版本不够高,可以在IE5安装程序中查找IEAK5.EXE或者IEAK5CD.EXE,执行该文件即可。
运行Iexpress程序,选择Create Compressed files only(Active Installs),这样制作出的即是.cab文件。接下来是软件包的命名,我们不妨命名为test.cab文件。然后再选取test.dll、test.inf两个文件进行打包。
4.进行数字签名
虽然我们做好了软件包,但是如果不用电子证书对他进行数字签名的话,它是不能通过客户端的安全检查的(除非安全级别设成“低”)。可使用signcode.exe,下载地址download/signcode.exe。
5.在网页上发布软件包
我们的终极目的当然是要在网页上发布该软件或插件。需要使用的HTML元素是:<object></object>
先将我们的操作中涉及的它的属性介绍如下:
clsid:生成的类在windows中的编号,这里涉及部分windows注册表知识,本文不再赘述。
codebase:指定需要下载的软件地址及其版本。
比如我们可以在网页中写入:
<object classid="clsid:A27CDB6E-AE6D-11CF-96B8-444553540000" codebase="test.cab#Version=1,0,0,0" VIEWASTEXT>
</object>
这里要提示大家的是,如果你并不清楚自己的软件应该设置成什么版本的时候,可以写上Version=-1,-1,-1,-1,这样就可以达到如果客户端没有该软件就下载,倘若下载过就忽略的目的。
最后,我们要做的就是体验自己的成果了。