C/S WinForm自动升级
这二天刚好完成一个C/S 自动升级的功能 代码分享一下
/// <summary>
/// 版本检测
/// </summary>
public class VersionCheckNEW
{
private const string Arg_CheckVersion = "CheckVersion";// 主程序调用升级程序检查是否有版本更新
private const string Arg_MainEXECall = "MainEXECall";// 主程序调用升级程序
private const string UpgraderINIFile = "UpgraderClient.ini";//本地升级配置文件
private const string UpgraderServerINIFile = "UpgraderServer.ini";//服务端配置文件
/// <summary>
/// 自动升级
/// </summary>
public static void AutoUpgrader(ref bool exitApp)
{
string file = Application.StartupPath + @"\" + Globals.DEF_UPGRADER_NAME;
if (!File.Exists(file)) return;//本地没有升级程序文件,不进行自动升级
frmWaiting.ShowMe(null, "正在检查升级程序的版本...");
//检查并下载最新的版本升级程序
VersionCheckNEW.CheckUpgraderByDownloader();
frmWaiting.ShowMe(null, "正在检查系统更新,请稍候...");
//检查系统版本
VersionCheckNEW.CheckVersion(ref exitApp);
}
/// <summary>
/// 取本地升级程序的版本号
/// </summary>
/// <returns></returns>
public static string GetUpgraderVersion()
{
IniFile ini = new IniFile(Application.StartupPath + @"\" + UpgraderINIFile);
string clientVer = ini.IniReadValue("Client", "UpgraderFileVersion");
return clientVer;
}
/// <summary>
/// 保存升级程序版本号
/// </summary>
/// <param name="version">版本号</param>
public static void SaveUpgraderVersion(string version)
{
IniFile ini = new IniFile(Application.StartupPath + @"\" + UpgraderINIFile);
ini.IniWriteValue("Client", "UpgraderFileVersion", version);
}
/// <summary>
/// 检查版本升级程序,有新版本自动下载
/// </summary>
public static bool CheckUpgraderByDownloader()
{
string upgraderPath = Application.StartupPath + @"\" + Globals.DEF_UPGRADER_NAME;
string serverVer = "";
try
{
byte[] fileData = File.ReadAllBytes(upgraderPath);
Assembly upgrader = Assembly.Load(fileData);
Type t = upgrader.GetType("A8ERP.UpgraderClient.Library.UpgraderController");
object o = t.Assembly.CreateInstance(t.FullName);
MethodInfo M = t.GetMethod("DownloadUpgrader");
//调用DownloadUpgrader方法
//参数名:destPath,传值:upgraderPath==Application.StartupPath
object r = M.Invoke(o, new object[] { upgraderPath });
serverVer = r.ToString();
if (serverVer != "")//有新版本
{
IniFile ini = new IniFile(Application.StartupPath + @"\" + UpgraderINIFile);
ini.IniWriteValue("Setup", "UpgraderFileVersion", serverVer.ToString());//写入版本号
}
}
catch (Exception ex)
{
//LogUserOperate.Write(ex);
//Msg.Warning("检查升级程序失败!\r\n" + ex.Message);
}
return serverVer != "";
}
/// <summary>
/// 检查更新,有更新要退出主程序
/// </summary>
/// <param name="AppExit">退出应用程序</param>
public static void CheckVersion(ref bool AppExit)
{
AppExit = false;
try
{
string checkResultFile = Application.StartupPath + "\\" + Guid.NewGuid().ToString().Replace("-", "") + ".ver"; //存储版本号的临时文件
string upgrader = Application.StartupPath + "\\" + Globals.DEF_UPGRADER_NAME;//升级程序文件名
File.WriteAllText(checkResultFile, ""); //创建空文件
checkResultFile = ShellPathNameConvertNEW.ToShortPathName(checkResultFile); //转换为DOS短文件名
Process pro = new Process();
pro.StartInfo = new ProcessStartInfo(upgrader, Arg_CheckVersion + " " + checkResultFile);//获取升级包的文件数
pro.StartInfo.UseShellExecute = false;
pro.Start();
pro.WaitForExit(3000);//等待升级程序关联程序退出
frmWaiting.HideMe(null);
//如果生成临时文件,返回可更新的文件数。
if (File.Exists(checkResultFile))
{
//读取临时文件内容
string result = File.ReadAllText(checkResultFile);
File.Delete(checkResultFile); //删除临时文件
if ((result != "") && (int.Parse(result) > 0))//有新版本,升级包的文件数>0
{
AppExit = true;
Process.Start(upgrader, Arg_MainEXECall); //启动自动升级程序
}
}
}
catch (Exception ex)
{
//LogUserOperate.Write(ex);
//Msg.ShowError("CheckVersion:" + ex.Message);
}
}
}

C/S WinForm自动升级的更多相关文章
- c# winform 自动升级
winform自动升级程序示例源码下载 客户端思路: 1.新建一个配置文件Update.ini,用来存放软件的客户端版本: [update] version=2011-09-09 15:26 2.新 ...
- 分享一个客户端程序(winform)自动升级程序,思路+说明+源码
做winform的程序,不管用没用过自动更新,至少都想过自动更新是怎么实现的. 我这里共享一个自动更新的一套版本,给还没下手开始写的人一些帮助,也希望有大神来到,给指点优化意见. 本初我是通过sock ...
- winform 自动升级
自动升级系统OAUS的设计与实现(续) (附最新源码) http://www.cnblogs.com/zhuweisky/p/4209058.html Winform在线更新 http://www.c ...
- winform自动升级方案
未涉及过winform升级,研究一阵,大致出来个不成熟的方案. 我的解决方案(判断升级,升级程序下载安装包的压缩包,解压,自动安装,重新启动程序). 1.首先根据服务器中软件版本号和本地软件版本号是否 ...
- 黄聪:C#Winform程序如何发布并自动升级(图解)
有不少朋友问到C#Winform程序怎么样配置升级,怎么样打包,怎么样发布的,在这里我解释一下打包和发布关于打包的大家可以看我的文章C# winform程序怎么打包成安装项目(图解)其实打包是打包,发 ...
- 【转】C#Winform程序如何发布并自动升级(图解)
有不少朋友问到C#Winform程序怎么样配置升级,怎么样打包,怎么样发布的,在这里我解释一下打包和发布关于打包的大家可以看我的文章C# winform程序怎么打包成安装项目(图解)其实打包是打包,发 ...
- C#Winform程序如何发布并自动升级(图解)
C#Winform程序如何发布并自动升级(图解) 有不少朋友问到C#Winform程序怎么样配置升级,怎么样打包,怎么样发布的,在这里我解释一下打包和发布 关于打包的大家可以看我的文章C# w ...
- SNF开发平台WinForm之八-自动升级程序部署使用说明-SNF快速开发平台3.3-Spring.Net.Framework
9.1运行效果: 9.2开发实现: 1.首先配置服务器端,把“SNFAutoUpdate2.0\服务器端部署“目录按网站程序进行发布到IIS服务器上. 2.粘贴语句,生成程序 需要调用的应用程序的Lo ...
- 在WinForm中使用Web Service来实现软件自动升级
来源:互联网 winform程序相对web程序而言,功能更强大编程更方便,但软件更新却相当麻烦,要到客户端一台一台地升级,面对这个实际问题,在最近的一个小项目中,本人设计了一个通过软件实现自动升级技术 ...
随机推荐
- css简单的数学运算
calc()是css3的一个新增的属性, .box{border:1px solid #ddd; width:calc(100% - 100px); background:#9AC8EB;} 兼容 ...
- 自己写的canvas 手写画板
<!DOCTYPE html> <html> <head> <title>canvas</title> <meta charset=& ...
- HDU4513 吉哥系列故事——完美队形II Manacher算法
题目链接:https://vjudge.net/problem/HDU-4513 吉哥系列故事——完美队形II Time Limit: 3000/1000 MS (Java/Others) Me ...
- YTU 2391: 求素数
2391: 求素数 时间限制: 1 Sec 内存限制: 128 MB 提交: 116 解决: 3 题目描述 设计一个程序,输出所有小于等于n(n为一个大于2的正整数)的素数. 要求:(1)每行输出 ...
- Python作业之购物商城
作业:购物商场 1.商品展示,价格 2.银行卡余额 3.付账 程序流程图如下: 代码如下: ShopDisplay = {'} print(ShopDisplay) ShoppingCartPrice ...
- Oracle基础:表空间名称大小写问题
现场环境: 操作系统:windows Oracle版本:10g 今天在通过imp导入数据时,日志提示TS_W5_D表空间不存在.感觉很奇怪,导入用户的表空间是ts_w5_d,并 ...
- android.annotation.SuppressLint
Lint是一个静态检查器,它围绕Android项目的正确性.安全性.性能.可用性以及可访问性进行分析.它检查的对象包括XML资源.位图.ProGuard配置文件.源文件甚至编译后的字节码. Lint包 ...
- 一个小bug,关于fuse_mount_sys
在mount.c 中的 int fuse_mount_sys 函数中,如果注销掉 fd的open语句,此时fd一般为0. 然后,用普通用户运行ssfs且不加-f参数,一切显示正常 fuse_moun ...
- CodeForces985F:Isomorphic Strings (字符串&hash)
题意:取出字符串Str里的两个串S,T,问对应位置的的字符在否有一一映射关系. hash:对于每个字符s=‘a’-‘z’,我们任意找一个i,满足Si==s,(代码里用lower_bound在区间找到最 ...
- 关于return
return ; 相当于执行完跳转url后停止,return无返回值仅作停止作用,是指停止当前方法,是方法的终点 return null ; 代表引用类型的空值