问题很常见,用过电脑的人都知道
在安装了某个软件后,当作者对软件进行了更改,打开时就要求自动更新
这个可能有点难度
或者说有哪位知道,在打包后,对软件进行了更改,重新打包补点包的方法
和安装
问题很常见,用过电脑的人都知道
在安装了某个软件后,当作者对软件进行了更改,打开时就要求自动更新
这个可能有点难度
或者说有哪位知道,在打包后,对软件进行了更改,重新打包补点包的方法
和安装
怎么这么常见的问题没人顶呢
// 有关程序集的常规信息通过下列属性集
// 控制。更改这些属性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("ccachem")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("cca")]
[assembly: AssemblyProduct("ccachem")]
[assembly: AssemblyCopyright("版权所有 (C) cca 2007")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// 将 ComVisible 设置为 false 使此程序集中的类型
// 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型,
// 则将该类型上的 ComVisible 属性设置为 true。
[assembly: ComVisible(false)]
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("4f52443b-6bf5-4fbc-1144-15d9bf080b7b")]
// 程序集的版本信息由下面四个值组成:
//
// 主版本
// 次版本
// 内部版本号
// 修订号
//
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
提供思路:当修改了项目后,把版本号改成 1.0.0.1 ,每次用户打开主MDI先检测版号是否是最新版号,如果不是就更新
这只是本人提供给大家一起参考的一种思路,具体怎么实现,请大家多多帮忙
[此贴子已经被作者于2007-7-31 14:32:06编辑过]
没想这么多想知道,那大家就一起研究下吧,我先把我做的部分共享给你们帮忙完善
数据库表: 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编辑过]
检查远程服务器是否存在文件的方法也很不错,这样的话上传一个新包就要删除旧包,文件名还要固定的,不是很灵活
再则从客户端检索远程服务端是否存在文件的执行效率不会比检索数据库来的快.
再从使用上来讲,如果我这个人很懒,或出差几个月没有登录过,我要升级两次以上才能正常使用系统了,那么检查远程是
否存在文件的方法就不是很灵活了