您的位置:首页 > 其它

系统升级程序的介绍

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;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: