实现局域网中客户端程序的自动分发与更新
一、解决问题的思路及要点
internetexplorer3.0以上版本就支持在网页中嵌入activex控件,用户通过浏览器访问网页时,将网页中的控件下载,并在用户机器上注册,以后就可在用户的浏览器上运行。控件下载一次后就驻留在用户本地机器上,下次再访问相同的网页时,如果activex控件的版本不变,不再下载该控件,而是直接运行用户本地的控件。因此我们可以在delphi中创建一个activex控件,以实现自动下载客户端程序的功能。
在delphi中实现文件下载的方法很多,比较简便的是直接用idhttp组件。idhttp提供了个get方:get(aurl:string;constaresponsecontent:tstream),该方法用tstrem来封装了
返回的内容,通过对tstream的saveto方法来保存下载的文件。get方法必须指定下载文件正确的url,而服务端的ip是可能改变的。在html中,利用脚本技术javascript可以获取当前网页的url,当访问者用浏览器打开一个网页时,javascript将产生一个指向该页面的document对象,document的location属性用于指定当前网页的url。因此在编写代码时必须将get方法的aurl参数设定为一个变量,这样可以先获取服务端网页的url后,再传递给get方法以便正确下载文件。
正确下载客户端程序后,还应该自动执行该程序。在delphi使用函数winexce(lpcmdline:pansichar;ucmdshow:cardinal)即可执行外部exe文件。最后还应自动关闭打开的浏览器,可以利用动态数据交换技术dde实现。windows的dde机基于windows的消息机制,两个应用程序通过相互之间传递dde消息进行dde会话,从而完成数据的请求、应答、传输,这两个应用程序分别称为服务器和客户。打开的浏览器可作为服务器,而activex可作为客户,delphi的组件tddeclinetconv用于客户程序建立和维护一个dde会话。在浏览器未降低安全级别时,用户从客户机上访问嵌入了activex的页面,不会弹出下载提示,用户仍然不能下载,因为该控件还没有证书,浏览器直接禁用。为此我们可以从网上下载数字签名工具建一个测试证书并对该控件进行数字签名。关于数字签名可以参见资料http://www.xiexiebang.com/200401/11.doc。
二、操作过程说明
1.在delphi中创建activeform:在delphi7中,点击【file】
→【new】
→【other„】
→【activex】
→【activeform】
什么是activeform。activeform也是activex控件。不同的是,一般的activex控件是单一的控件,只能从一个vcl控件转换而来,而activeform可以把一个或多个vcl控件转换为一个复合的activex控件。
在接下来的activeformwinzard对话框中newacitvexname项目中输入要创建的控件名如downclient,其它默认。点击“确定”按钮后,delphi中就创建了activeform。从【system】
组件面板中拖入一个ddeclientconv组件,以实现关闭打开的浏览器。从【indyclients】
组件面板中拖入一个idhttp控件,以实现文件下载。
2.为activeform添加一个方法
点击菜单栏中【view】
→【typelibrary】
(未完,全文共10969字,当前显示1478字)
(请认真阅读下面的提示信息)