系统升级程序的介绍
2011-11-03 09:55
253 查看
开发系统时,很多时候都要开发系统升级程序。升级程序的方式大多相同。目前我开发一个升级程序是这样的。启动主程序的同时启动升级程序,通过升级程序获取服务器上版本配置文件,判断当前的系统版本是否最新的版本。若是最新版本,则升级程序关闭。否则弹出提示有新版本需要下载,然后远程服务器上下载新版本,下载后提示关闭正在运行的主程序,使用新版本覆盖旧版本程序,并将配置文件中的版本号更新为最新程序的版本号。
下面贴出我开发的升级程序的部分代码:
/// <summary>
/// 检查是否有更新
/// </summary>
public void checkUpdate()
{
string updateUrl = "http://172.16.10.199:8040/DownloadWinecooler/update.xml";//升级配置的XML文件地址
if (ConfigurationManager.AppSettings["updateUrl"] != null)
{
updateUrl = ConfigurationManager.AppSettings["updateUrl"].ToString();
}
TextLog.AppendText(updateUrl);
TextLog.AppendText("\r\n");
//将信息写入到日志输出文件
string strOuput = string.Format("Url:{0}!\n", updateUrl);
SoftUpdate.TP_WriteAppLogFile(SoftUpdate.g_AppLogFileName, strOuput);
SoftUpdate app = new SoftUpdate(Application.ExecutablePath, "Update", updateUrl);
app.UpdateFinish += new UpdateState(app_UpdateFinish);
try
{
//if (app.IsUpdate && MessageBox.Show("检查到新版本,是否更新?", "Update", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
if (app.IsUpdate)
{
strOuput = string.Format("有新版本,正在下载中...\n");
TextLog.AppendText(strOuput);
//将信息写入到日志输出文件
SoftUpdate.TP_WriteAppLogFile(SoftUpdate.g_AppLogFileName, strOuput);
Thread update = new Thread(new ThreadStart(app.Update));
update.Start();
}
else
{
strOuput = string.Format("已经是最新版本了\n");
TextLog.AppendText(strOuput);
//将信息写入到日志输出文件
SoftUpdate.TP_WriteAppLogFile(SoftUpdate.g_AppLogFileName, strOuput);
RestartPC();
}
}
catch (Exception ex)
{
ex.ToString();
//MessageBox.Show(ex.Message);
strOuput = string.Format("下载出错啦!\n");
TextLog.AppendText(strOuput);
//将信息写入到日志输出文件
SoftUpdate.TP_WriteAppLogFile(SoftUpdate.g_AppLogFileName, strOuput);
RestartPC();
}
}
/// <summary>
/// 更新完成
/// </summary>
/// <param name="strPathName"></param>
void app_UpdateFinish(string strPathName)
{
filename = strPathName;
string strOuput = string.Format("更新完成!\n");
TextLog.AppendText(strOuput);
//将信息写入到日志输出文件
SoftUpdate.TP_WriteAppLogFile(SoftUpdate.g_AppLogFileName, strOuput);
//然后更新新程序
PostMessage(this.Handle, MYMESSAGE_UPDATE, "", ""); //发用户自定义消息
}
/// <summary>
/// 重写窗体的消息处理函数DefWndProc,从中加入自己定义消息 MYMESSAGE_UPDATE 的检测的处理入口
/// </summary>
/// <param name="m"></param>
protected override void DefWndProc(ref Message m)
{
switch (m.Msg)
{
//接收自定义消息MYMESSAGE,并显示其参数
case MYMESSAGE_UPDATE:
{
//KillProcess("calc.exe");//计算器的例子
string strOuput = string.Format("准备用新版本的的程序覆盖旧程序,关闭当前酒柜系统\n");
//将信息写入到日志输出文件
SoftUpdate.TP_WriteAppLogFile(SoftUpdate.g_AppLogFileName, strOuput);
KillProcess("SysMain");//
strOuput = string.Format("启动刚才下载的安装包覆盖旧版本程序,当前新版本为:{0}\n",SoftUpdate.newVerson);
ConfigManager.UpdateOrCreateAppSetting("Main.exe.config", "Version", SoftUpdate.newVerson);
//将信息写入到日志输出文件
SoftUpdate.TP_WriteAppLogFile(SoftUpdate.g_AppLogFileName, strOuput);
ShellExecute(0, "open", filename, "", "", ShowCommands.SW_SHOWNORMAL);
Thread.Sleep(1000);
//输出的调试字符串
strOuput = string.Format("更新酒柜客户端系统完成,准备重新启动电脑\n");
//将信息写入到日志输出文件
SoftUpdate.TP_WriteAppLogFile(SoftUpdate.g_AppLogFileName, strOuput);
RestartPC();
}
break;
default:
base.DefWndProc(ref m);
break;
}
}
下面贴出我开发的升级程序的部分代码:
/// <summary>
/// 检查是否有更新
/// </summary>
public void checkUpdate()
{
string updateUrl = "http://172.16.10.199:8040/DownloadWinecooler/update.xml";//升级配置的XML文件地址
if (ConfigurationManager.AppSettings["updateUrl"] != null)
{
updateUrl = ConfigurationManager.AppSettings["updateUrl"].ToString();
}
TextLog.AppendText(updateUrl);
TextLog.AppendText("\r\n");
//将信息写入到日志输出文件
string strOuput = string.Format("Url:{0}!\n", updateUrl);
SoftUpdate.TP_WriteAppLogFile(SoftUpdate.g_AppLogFileName, strOuput);
SoftUpdate app = new SoftUpdate(Application.ExecutablePath, "Update", updateUrl);
app.UpdateFinish += new UpdateState(app_UpdateFinish);
try
{
//if (app.IsUpdate && MessageBox.Show("检查到新版本,是否更新?", "Update", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
if (app.IsUpdate)
{
strOuput = string.Format("有新版本,正在下载中...\n");
TextLog.AppendText(strOuput);
//将信息写入到日志输出文件
SoftUpdate.TP_WriteAppLogFile(SoftUpdate.g_AppLogFileName, strOuput);
Thread update = new Thread(new ThreadStart(app.Update));
update.Start();
}
else
{
strOuput = string.Format("已经是最新版本了\n");
TextLog.AppendText(strOuput);
//将信息写入到日志输出文件
SoftUpdate.TP_WriteAppLogFile(SoftUpdate.g_AppLogFileName, strOuput);
RestartPC();
}
}
catch (Exception ex)
{
ex.ToString();
//MessageBox.Show(ex.Message);
strOuput = string.Format("下载出错啦!\n");
TextLog.AppendText(strOuput);
//将信息写入到日志输出文件
SoftUpdate.TP_WriteAppLogFile(SoftUpdate.g_AppLogFileName, strOuput);
RestartPC();
}
}
/// <summary>
/// 更新完成
/// </summary>
/// <param name="strPathName"></param>
void app_UpdateFinish(string strPathName)
{
filename = strPathName;
string strOuput = string.Format("更新完成!\n");
TextLog.AppendText(strOuput);
//将信息写入到日志输出文件
SoftUpdate.TP_WriteAppLogFile(SoftUpdate.g_AppLogFileName, strOuput);
//然后更新新程序
PostMessage(this.Handle, MYMESSAGE_UPDATE, "", ""); //发用户自定义消息
}
/// <summary>
/// 重写窗体的消息处理函数DefWndProc,从中加入自己定义消息 MYMESSAGE_UPDATE 的检测的处理入口
/// </summary>
/// <param name="m"></param>
protected override void DefWndProc(ref Message m)
{
switch (m.Msg)
{
//接收自定义消息MYMESSAGE,并显示其参数
case MYMESSAGE_UPDATE:
{
//KillProcess("calc.exe");//计算器的例子
string strOuput = string.Format("准备用新版本的的程序覆盖旧程序,关闭当前酒柜系统\n");
//将信息写入到日志输出文件
SoftUpdate.TP_WriteAppLogFile(SoftUpdate.g_AppLogFileName, strOuput);
KillProcess("SysMain");//
strOuput = string.Format("启动刚才下载的安装包覆盖旧版本程序,当前新版本为:{0}\n",SoftUpdate.newVerson);
ConfigManager.UpdateOrCreateAppSetting("Main.exe.config", "Version", SoftUpdate.newVerson);
//将信息写入到日志输出文件
SoftUpdate.TP_WriteAppLogFile(SoftUpdate.g_AppLogFileName, strOuput);
ShellExecute(0, "open", filename, "", "", ShowCommands.SW_SHOWNORMAL);
Thread.Sleep(1000);
//输出的调试字符串
strOuput = string.Format("更新酒柜客户端系统完成,准备重新启动电脑\n");
//将信息写入到日志输出文件
SoftUpdate.TP_WriteAppLogFile(SoftUpdate.g_AppLogFileName, strOuput);
RestartPC();
}
break;
default:
base.DefWndProc(ref m);
break;
}
}
相关文章推荐
- 系统升级程序的介绍
- 系统升级程序的介绍(转)
- 微信小程序购物商城系统开发系列-目录结构介绍
- ios (推送之远程推送)升级成ios8系统之后有些程序接收不到远程推送
- 利用ant脚本 自动构建svn增量/全量 系统程序升级包
- Admin-Framework(七)系统升级功能介绍
- 在Linux系统中运行.net程序——Mono介绍
- GRUB——系统的引导程序简单介绍
- 利用ant脚本 自动构建svn增量/全量 系统程序升级包
- 升级系统 --- 显示程序(基于framebuffer)
- OTA和Recovery系统升级流程介绍
- 根文件系统的库文件升级以及init程序的升级
- 系统升级程序和客户端升级程序
- linux系统下的ps命令介绍 查看某个时间点的程序动行情况
- OTA和Recovery系统升级流程介绍
- 利用ant脚本 自动构建svn增量/全量 系统程序升级包
- 微信小程序购物商城系统开发系列-工具篇的介绍
- OTA和Recovery系统升级流程介绍
- 利用ant脚本 自动构建svn增量/全量 系统程序升级包【转】
- 系统升级程序和客户端升级程序