CEOVisual Studio .NET 2003Windows 2003.NET 1.1Windows 2000Windows XP中级开发Visual StudioWindows.NETVisual Basic
在线自动更新工具包






4.41/5 (19投票s)
2004年10月27日
2分钟阅读

117810

1825
包含更新客户端、创建器和服务器脚本的更新工具集
引言
这是一组工具,您可以使用它们轻松地将自动软件更新分发给您的客户端。![]() |
图片 #1 |
正如您在图片1中看到的,理想的客户端工作流程是直接的。
为了让这种理论上的方式以一种可接受的方式(在这个解决方案中)工作,您需要绕道到Web服务器。这意味着
- 您将更新发布到您的Web服务器
- 您在客户站点运行的应用程序将自动获取并安装它们
它是如何工作的?
![]() |
图片 #2 |
正如您在图片2中看到的,更新工具集由3个不同的部分组成
- 生产者站点的Updatecreator - 使用该工具,您的更新将被打包并分发到世界各地。
- 客户站点的Updateclient - 此类已插入到您的应用程序中。您负责调用它。(例如,每次应用程序启动时或定期)
- 客户站点的Client Updater - 这是一个独立的程序,由Updateclient类调用和配置;它关闭主应用程序,执行解包和复制,最后重新启动应用程序。
- Web服务器 任何一方都可以访问 - Web服务器存储更新信息和更新文件;目前使用mysql/php,上传使用ftp
- #ziplib,由Mike Krueger解决压缩问题
- FTP Component 1.0,由componentspot.com提供
基本功能说明
生产者站点
(参见图片3)- 项目已编译
- 已打包
- 已上传到Web服务器
- 在线数据库已使用新版本更新
![]() |
图片 #3 |
客户站点
(参见图片4)- 调用UpdateClient以检查更新
- 它从Web服务器请求实际版本
- 它接收实际版本号,并将其与自身硬编码的版本号进行比较
- 当在线版本较新时,将获取更新,否则,在此步骤中完成更新检查。
- 接收更新文件并将其保存到临时文件夹
- 解压缩到该临时文件夹
- 当前:仅将所有内容复制到旧内容之上,而不检查任何内容
![]() |
图片 #4 |
使用代码
在Web服务器上设置mysql表#
# Table structure for table `version`
#
CREATE TABLE version (
projectid int(11) NOT NULL default '0',
projectname text NOT NULL,
actualversion int(11) NOT NULL default '0',
PRIMARY KEY (projectid)
) TYPE=MyISAM;
创建一个具有以下内容的update.php脚本
<?php
mysql_connect("mydbserver.com","dbuser","dbpassword") or die(mysql_error());
mysql_select_db("mydb") or die(mysql_error());
switch($_GET["action"]){
case "check":
$res=mysql_query(
"SELECT * FROM version WHERE projectname='".$_GET["project"]."'");
$arr=mysql_fetch_array($res);
echo $arr["actualversion"];
die();
break;
case "setnew":
$res=mysql_query(
"UPDATE version SET actualversion=".$_GET["version"]."
WHERE projectname='".$_GET["project"]."'");
die();
break;
default:
header("location:/");
die();
break;
} // switch
?>
将update.php上传到updateclients中指定的位置。不要忘记为更新创建目录!将其集成到您的应用程序中
Public Class Form1
...
Dim WithEvents updater As updateclient.clsClient
Private Sub Form1_Load(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles MyBase.Load
updater = New updateclient.clsClient
updater.CheckForNewVersion(ProjectName, VersionNumber,
ProjectName, Application.ExecutablePath)
End Sub
...
Private Sub updater_endall() Handles updater.endall
end
End Sub
...
End Class
Module Module1
Public Const ProjectName As String = "yourappname"
Public Const VersionNumber As Integer = 25
Public VersionDate As Date = New Date(2004, 10, 25) 'not used yet!
End Module
关注点
在这个快速发展的业务中,更新变得越来越重要。此工具集只是使用上述概念的快速破解起点。您会注意到不存在错误处理,并且还有许多有用的功能尚未包含在内。您能以任何方式改进该概念或工具集吗?历史
- 2004年10月27日首次发布