关于升级程序的讨论
没想这么多想知道,那大家就一起研究下吧,我先把我做的部分共享给你们帮忙完善
数据库表: UpDateTime
标识 更新日期 更新版号 更新描述 补丁包下载地址
-------------- --------------------- -------------- ------------- ------------------
id (int 主键) updatetime (datetime) cono (varchar) mtext (text) httpurl (varchar)
1 2007-07-31 1.0.0.1 相关描述在此省略 http://192.168.0.100/1.rar
2 2007-08-01 1.0.0.2 相关描述在此省略 http://192.168.0.100/1.rar
上表是远程服务器上的一张表,初始了两条数据作为测试
在更新后会在项目中产生一个AutoUpdater.xml文件用于记录更新后的版本信息,以便下次检测数据表,是否有新更新
所以在首次打包部署的时候,初始这个XML文件,如下
<?xml version="1.0" encoding="utf-8" ?>
<AutoUpdater>
<UpdateInfo>
<UpdateTime Date = "2007-07-30"/> <!--升级文件的更新日期-->
<Version Num = "1.0.0.0"/> <!--升级文件的版本号-->
</UpdateInfo>
<UpdateFileList> <!--升级文件列表-->
<UpdateFile FileName = "aa.txt"/> <!--共有三个文件需升级-->
<UpdateFile FileName = "VB40.rar"/>
<UpdateFile FileName = "VB4-1.CAB"/>
</UpdateFileList>
<RestartApp>
<ReStart Allow = "Yes"/> <!--允许重新启动应用程序-->
<AppName Name = "TIMS.exe"/> <!--启动的应用程序名-->
</RestartApp>
</AutoUpdater>
方法如下:
/// <summary>
/// 获取客户端应用程序及服务器端升级程序的最近一次更新日期
/// </summary>
/// <param name="Dir">路径</param>
/// <returns></returns>
public string GetTheLastUpdateTime(string Dir)
{
string LastUpdateTime = "";
string AutoUpdaterFileName = Dir + @"\AutoUpdater.xml";
if (!File.Exists(AutoUpdaterFileName)) //AutoUpdater.xml文件不存在
{
return LastUpdateTime;
}
//打开xml文件
FileStream myFile = new FileStream(AutoUpdaterFileName, FileMode.Open);
//xml文件阅读器
XmlTextReader xml = new XmlTextReader(myFile);
while (xml.Read())
{
if (xml.Name == "UpdateTime")
{
//获取升级文档的最后一次更新日期
LastUpdateTime = xml.GetAttribute("Date");
//MessageBox.Show(LastUpdateTime);
break;
}
}
xml.Close();
myFile.Close();
return LastUpdateTime;
}
/// <summary>
/// 比较更新日期和客户端日期
/// 如果需更新日期 > 客户端最后一次更新日期,就列出更新版号
/// 单击版号下载补点包
/// </summary>
public void GetUpdateTime()
{
string t2 = this.GetTheLastUpdateTime(@"../../"); //获取AutoUpdater.xml中日期
string t1 = "";
ArrayList list = new ArrayList();
string sql = "select updatetime,cono from UpDateTime";
SqlCommand cmd = ClassLibraryMain.Bind_Command.BuildSqlCommand(sql);
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
t1 = Convert.ToDateTime(dr["updatetime"]).ToString("yyyy-MM-dd");
if (Convert.ToDateTime(t1) > Convert.ToDateTime(t2)) //比较客户端和服务端更新日期
{
list.Add(dr["cono"].ToString().Trim());
//用数组存放需要更的的版号,
//有可能这人懒,好几月没上线了,
//所以有好几个版本需更新,所以列出存入可变数组
}
}
foreach (string item in list)
{
MessageBox.Show(item); //列出需更新的版号
}
ClassLibraryMain.Bind_Command.CloseSqlCommand(cmd);
}
GetUpdate getup = new GetUpdate(); //忘了说了GetUpdate是我上述方法的命名空间
private void Login_Load(object sender, EventArgs e) //在登录窗体Load事件中调用方法
{
//getup.thePreUpdateDate();
getup.GetUpdateTime();
}
下面还在完善中,望大家帮我一起完善它
[此贴子已经被天使不哭于2007-8-16 17:20:22编辑过]