CS结构软件自动升级实现(四)

接CS结构软件自动升级实现(三) :

Config.java处理配置文件:

 1/** *//********************************************************************
  2 * 项目名称        :rochoc<p>
  3 * 包名称         :com.rochoc.autoupdate<p>
  4 * 文件名称        :Config.java<p>
  5 * 编写者         :kfzx-luoc<p>
  6 * 编写日期        :2008-12-22<p>
  7 * 程序功能(类)描述  :<p>
  8 * 用于更新的配置文件读取对像
  9 * 程序变更日期      :
10 * 变更作者        :
11 * 变更说明        :
12********************************************************************/
13package com.rochoc.autoupdate;
14
15import java.io.File;
16import java.text.SimpleDateFormat;
17import java.util.Date;
18import java.util.List;
19
20import org.dom4j.Document;
21import org.dom4j.Element;
22import org.dom4j.io.SAXReader;
23
24
25/** *//**
26 * @author kfzx-luoc
27 *
28 * TODO To change the template for this generated type comment go to
29 * Window - Preferences - Java - Code Style - Code Templates
30 */
31public class Config
32{
33  public static String cfgFile = ".\\config\\autoupdate.xml";
34  private static Config config = null;
35  /** *//** xml的document*/
36  private Document doc = null;
37  public static Config getInstance()
38  {
39    if(config==null)
40    {
41      config = new Config();
42    }
43    return config;
44  }
45  
46  private Config()
47  {
48    try
49    {
50      SAXReader reader = new SAXReader();
51      doc = reader.read(cfgFile);
52    }catch(Exception e)
53    {
54      e.printStackTrace();
55    }
56  }
57  public void refresh()
58  {
59    config = new Config();
60  }
61  public String getVerstion()
62  {
63    if(config==null)
64    {
65      return "";
66    }
67    List lst = doc.selectNodes("Info/Version");
68    Element el = (Element)lst.get(0);
69    return el.getText();
70  }
71  public String getServerIp()
72  {
73    if(config==null)
74    {
75      return "";
76    }
77    List lst = doc.selectNodes("Info/UpdateServer/Ip");
78    Element el = (Element)lst.get(0);
79    return el.getText();
80  }
81  public UpdFile [] getFiles()
82  {
83    if(config==null)
84    {
85      return null;
86    }
87    List file = doc.selectNodes("Info/Files");
88    List lst = ((Element)file.get(0)).elements();
89    if(lst.size()==0)
90    {
91      return null;
92    }
93    UpdFile files[] = new UpdFile[lst.size()];
94    for(int i=0;i<lst.size();i++)
95    {
96      Element el = (Element)lst.get(i);
97      List childs = el.elements();
98      Element name = (Element)childs.get(0);//Name
99      Element path = (Element)childs.get(1);//Path
100      Element ver = (Element)childs.get(2);//Version
101      files[i] = new UpdFile(name.getText());
102      if("File".equals(el.getName()))
103      {
104        files[i].setType(0);//文件
105      }else
106      {
107        files[i].setType(1);//目录
108      }
109      files[i].setPath(path.getText());
110      files[i].setVersion(ver.getText());
111    }
112    return files;
113  }
114  public String getServerPort()
115  {
116    if(config==null)
117    {
118      return "";
119    }
120    List lst = doc.selectNodes("Info/UpdateServer/Port");
121    Element el = (Element)lst.get(0);
122    return el.getText();
123  }
124  public static void print(String msg)
125  {
126    SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss->>" );
127    String str = sdf.format( new Date());
128    System.out.println(str+msg);
129  }
130  public static void main(String args[])
131  {
132    Config cfg = Config.getInstance();
133    UpdFile files[] = cfg.getFiles();
134    for(int i=0;i<files.length;i++)
135    {
136      System.out.println(files[i]);
137    }
138    Config.print("test");
139  }
140  /** *//**
141   * 格式化路径,增加其尾部的目录分隔符
142   *
143   * @param p 要格式化的目录字符串
144   */
145  public static String formatPath(String p)
146  {
147    if (!p.endsWith(File.separator))
148      return (p + File.separator);
149    return p;
150  }
151
152  /** *//**
153   * 格式化路径,去除其尾部的目录分隔符
154   *
155   * @param p 要格式化的目录字符串
156   */
157  public static String unformatPath(String p)
158  {
159    if (p.endsWith(File.separator))
160      return (p.substring(0, p.length()-1));
161    return p;
162  }
163  public static byte[] getCmd(String cmd)
164  {
165    //第一位用于标识是命令,后面8位为命令名
166    byte cmdb [] = new byte[9];
167    cmdb[0] = AUPD.CMD_DATA_SECT;
168    byte [] tmp = cmd.getBytes();
169    if(tmp.length!=8)
170    {
171      Config.print("命令有误:"+cmd+"<<");
172      return null;
173    }
174    for(int i=0;i<8;i++)
175    {
176      cmdb[i+1] = tmp[i];
177    }
178    return cmdb;
179  }
180  public static String parseCmd(byte cmd[])
181  {
182    return new String(cmd,0,8);
183  }
184  public static byte [] getLen(int len)
185  {
186    String slen = String.valueOf(len);
187    while(slen.length()<4)
188    {
189      slen = "0"+slen;
190    }
191    return slen.getBytes();
192  }
193  public static void copyArray(byte objary[], byte souary[], int o_begin,
194      int s_begin, int len)
195  {
196    for (int i = 0; i < len; i++)
197    {
198      objary[o_begin + i] = souary[s_begin + i];
199    }
200  }
201}

时间: 2024-10-29 22:08:32

CS结构软件自动升级实现(四)的相关文章

CS结构软件自动升级实现(一)

前段时间做了一个工具发布给公司的各部门使用后反馈了不少BUG,每次修改后均需要发邮件通知各用户替换最新版本,很不方便,因此后来就写了一个自动升级的功能,这样每次发布新的版本时只需要将其部署到自动升级服务器上,工具使用用户运行工具时就会连接到自动升级服务器,检查是否有版本更新,如果有则完成更新后再运行最新版本,否则就运行当前工具版本. 为了使这个自动升级模块具有通用性,我将其做成可以单独运行的程序,而并非集成到工具中,这样则可以为各类软件提供自动升级的功能.自动升级模块采用SOCKET方式实现升级

CS结构软件自动升级实现(二)

本实现包括: 1.AUPD.java 服务端和客户端之间的通讯协议 2.AutoUpdateServer.java 服务端的监听进程 3.AUpdSrvProc.java服务端的服务线程,用于处理客户端的自动升级请求 4.ClientVerParser.java服务端服务线程用于解决客户端版本信息的类 5.AutoUpdateClient.java客户端的自动升级请求进程 6.Config.java用于服务端和客户端读取本地配制文件的类 7.UpdFile.java用于文件传输的文件对像 本实现

CS结构软件自动升级实现(三)

AUpdSrvProc.java服务端服务线程,关键代码之一: 1/** *//******************************************************************** 2 * 项目名称 :rochoc<p> 3 * 包名称 :com.rochoc.autoupdate<p> 4 * 文件名称 :AUpdSrvProc.java<p> 5 * 编写者 :kfzx-luoc<p> 6 * 编写日期 :2008-1

在C#中实现软件自动升级

winform程序相对web程序而言,功能更强大,编程更方便,但软件更新却相当麻烦,要到客户端一台一台地升级,本文结合实际情况,通过软件实现自动升级,弥补了这一缺陷,有较好的参考价值.由于程序在运行时不能用新的版本覆盖自己,因此,我们将登录窗口单独做成一个可执行文件,用户登录时,从网上检测是否有新的主程序,如果有,则从后台下载并覆盖老的版本,用户输入正确的用户名和密码后,通过参数将必要的信息(如用户名.密码等)传递给主程序,实现登录,我们还是以实际例子来说明.创建一个项目,不妨取名为MainPr

在WinForm中使用Web Services 来实现 软件 自动升级( Auto Update ) (C#)

services|web winform程序相对web程序而言,功能更强大,编程更方便,但软件更新却相当麻烦,要到客户端一台一台地升级,面对这个实际问题,在最近的一个小项目中,本人设计了一个通过软件实现自动升级技术方案,弥补了这一缺陷,有较好的参考价值. 一.升级的好处. 长期以来,广大程序员为到底是使用Client/Server,还是使用Browser/Server结构争论不休,在这些争论当中,C/S结构的程序的可维护性差,布置困难,升级不方便,维护成本高就是一个相当重要的因素,也是那些B/S

在WinForm中使用Web Services 来实现 软件 自动升级( Auto Update )

winform程序相对web程序而言,功能更强大,编程更方便,但软件更新却相当麻烦,要到客户端一台一台地升级,面对这个实际问题,在最近的一个小项目中,本人设计了一个通过软件实现自动升级技术方案,弥补了这一缺陷,有较好的参考价值.一.升级的好处. 长期以来,广大程序员为到底是使用Client/Server,还是使用Browser/Server结构争论不休,在这些争论当中,C/S结构的程序的可维护性差,布置困难,升级不方便,维护成本高就是一个相当重要的因素,也是那些B/S的支持者们将Client/S

小米3怎么取消软件自动升级

1.我们进入手机待机状态,回到手机桌面. 2.然后我们在手机中找到"应用商店" 点击它进入,如下图所示 3.进入应用商店.点击手机屏幕左下角的功能按键(虚拟按键,在机身). 4.然后在弹出菜单我们同样点击"设置"按钮,如下图所示. 5.好了再进入到的设置界面中我们会看到一个"自动升级"及"默认安装"默认是打开的,我们只要关闭就可以了. 6.好了现在我们关闭它这样以后就不会自动更新软件了.

C#客户端软件自动升级程序

程序界面: 本程序说明 * 自动更新通用程序.最好放在需要用到自动更新的程序的同级目录下 * 自动更新采用文件接口.在本程序的同级目录下必须要有autoupdate.config文件 * 文件格式为: * url=获取升级到配置文件 * cmd=升级完成后执行的命令 url=url1$url2$url3$url4 cmd=cmd.exe * 自动升级程序会按顺序检查url,如果第一个无效就选第二个,依次类推. * 升级完成以后执行cmd处写的命令. 如果检查到URL有效那么就会获取URL的返回的

360安全卫士如何设置不自动升级

  有没有这种经历,某天开机后打开360安全卫士,一看不认识了?原来是软件自动升级了.每一个版本都有一批忠实的用户,如非特殊情况有些人根本不乐意升级.今天就教大家把软件中的自动升级关掉. 1.首先打开360安全卫士,右上角一个小箭头,选择"设置". 2.在设置的"升级方式"窗口下的升级方式中,选择不自动升级. 这样你就可以根据自身的意愿决定是否升级,以及什么时候升级了.你的电脑你做主!