65.9K
CodeProject 正在变化。 阅读更多。
Home

在线自动更新工具包

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.41/5 (19投票s)

2004年10月27日

2分钟阅读

viewsIcon

117810

downloadIcon

1825

包含更新客户端、创建器和服务器脚本的更新工具集

引言

这是一组工具,您可以使用它们轻松地将自动软件更新分发给您的客户端。

Concept
图片 #1

正如您在图片1中看到的,理想的客户端工作流程是直接的。
为了让这种理论上的方式以一种可接受的方式(在这个解决方案中)工作,您需要绕道到Web服务器。这意味着

  • 您将更新发布到您的Web服务器
  • 您在客户站点运行的应用程序将自动获取并安装它们

它是如何工作的?

Concept
图片 #2

正如您在图片2中看到的,更新工具集由3个不同的部分组成

  • 生产者站点的Updatecreator - 使用该工具,您的更新将被打包并分发到世界各地。
  • 客户站点的Updateclient - 此类已插入到您的应用程序中。您负责调用它。(例如,每次应用程序启动时或定期)
  • 客户站点的Client Updater - 这是一个独立的程序,由Updateclient类调用和配置;它关闭主应用程序,执行解包和复制,最后重新启动应用程序。
  • Web服务器 任何一方都可以访问 - Web服务器存储更新信息和更新文件;目前使用mysql/php,上传使用ftp
该程序使用

基本功能说明

生产者站点

(参见图片3
  1. 项目已编译
  2. 已打包
  3. 已上传到Web服务器
  4. 在线数据库已使用新版本更新

Concept
图片 #3

客户站点

(参见图片4
  1. 调用UpdateClient以检查更新
  2. 它从Web服务器请求实际版本
  3. 它接收实际版本号,并将其与自身硬编码的版本号进行比较
  4. 当在线版本较新时,将获取更新,否则,在此步骤中完成更新检查。
  5. 接收更新文件并将其保存到临时文件夹
  6. 解压缩到该临时文件夹
  7. 当前:仅将所有内容复制到旧内容之上,而不检查任何内容

Concept
图片 #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日首次发布
© . All rights reserved.