这二天刚好完成一个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自动升级的更多相关文章

  1. c# winform 自动升级

    winform自动升级程序示例源码下载  客户端思路: 1.新建一个配置文件Update.ini,用来存放软件的客户端版本: [update] version=2011-09-09 15:26 2.新 ...

  2. 分享一个客户端程序(winform)自动升级程序,思路+说明+源码

    做winform的程序,不管用没用过自动更新,至少都想过自动更新是怎么实现的. 我这里共享一个自动更新的一套版本,给还没下手开始写的人一些帮助,也希望有大神来到,给指点优化意见. 本初我是通过sock ...

  3. winform 自动升级

    自动升级系统OAUS的设计与实现(续) (附最新源码) http://www.cnblogs.com/zhuweisky/p/4209058.html Winform在线更新 http://www.c ...

  4. winform自动升级方案

    未涉及过winform升级,研究一阵,大致出来个不成熟的方案. 我的解决方案(判断升级,升级程序下载安装包的压缩包,解压,自动安装,重新启动程序). 1.首先根据服务器中软件版本号和本地软件版本号是否 ...

  5. 黄聪:C#Winform程序如何发布并自动升级(图解)

    有不少朋友问到C#Winform程序怎么样配置升级,怎么样打包,怎么样发布的,在这里我解释一下打包和发布关于打包的大家可以看我的文章C# winform程序怎么打包成安装项目(图解)其实打包是打包,发 ...

  6. 【转】C#Winform程序如何发布并自动升级(图解)

    有不少朋友问到C#Winform程序怎么样配置升级,怎么样打包,怎么样发布的,在这里我解释一下打包和发布关于打包的大家可以看我的文章C# winform程序怎么打包成安装项目(图解)其实打包是打包,发 ...

  7. C#Winform程序如何发布并自动升级(图解)

    C#Winform程序如何发布并自动升级(图解)     有不少朋友问到C#Winform程序怎么样配置升级,怎么样打包,怎么样发布的,在这里我解释一下打包和发布 关于打包的大家可以看我的文章C# w ...

  8. SNF开发平台WinForm之八-自动升级程序部署使用说明-SNF快速开发平台3.3-Spring.Net.Framework

    9.1运行效果: 9.2开发实现: 1.首先配置服务器端,把“SNFAutoUpdate2.0\服务器端部署“目录按网站程序进行发布到IIS服务器上. 2.粘贴语句,生成程序 需要调用的应用程序的Lo ...

  9. 在WinForm中使用Web Service来实现软件自动升级

    来源:互联网 winform程序相对web程序而言,功能更强大编程更方便,但软件更新却相当麻烦,要到客户端一台一台地升级,面对这个实际问题,在最近的一个小项目中,本人设计了一个通过软件实现自动升级技术 ...

随机推荐

  1. Linux监控命令

    dd命令用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换.注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512:c=1:k=1024:w=2它不是一个专业的测试工具,不过如果对于 ...

  2. NavigationView更改菜单icon和title颜色变化效果

    NavigationView menu默认icon和title会随着菜单状态改变而改变,选择某个菜单后再次打开侧边菜单后会发现该菜单的icon和title会变成应用的主颜色,其他菜单项仍然为黑色. 如 ...

  3. ekhtml使用总结

    ekhtml是一个高效SAX方式的HTML解析库. 文件说明 官网下载ekhtml-0.3.2.tar.gz文件解压后,内部包括源码.测试文件.文档.编译脚本等. 如需编译成静态库或动态库后进行集成, ...

  4. JQ的双向数据绑定

    把渲染页面封装在function里面 在修改后直接调用,但是如果有alert();一定要注意function的摆放位置,正常应该是在alert前面,应为如果在后面会影响重新渲染的效果

  5. Eclipse全项目搜索指定文件&字串

    在eclipse中如果希望在大量的项目中寻找指定的文件可不是一件轻松的事,还好eclipse提供了强大的搜索功能. 我们可以通过通配符或正则表达式来设定查寻条件,下面是操作示例: ctrl+h 打开搜 ...

  6. 杂项-公司:Aspose

    ylbtech-杂项-公司:Aspose Aspose 于2002年3月在澳大利亚悉尼创建,旗下产品覆盖文档.图表.PDF.条码.OCR.CAD.HTML.电子邮件等各个文档管理领域,为全球.NET ...

  7. IT行业怎么了?程序员按时上下班也被开除

    转自:https://blog.csdn.net/keymo_/article/details/7783389 近日看了一条新闻是京东员工按时上下班遭“被离职”.话说一员工入职一个多月以来,每天保质保 ...

  8. centos7安装redis3.2.12

    1.准备安装包,放在/usr/local/src/ 2.解压安装包,解压到/usr/local/ tar zxf redis-3.2.12.tar.gz -C /usr/local/ 3.cd /us ...

  9. 038--HTML

    一.HTML的定义 1. 超文本标记语言(Hypertext Markup Language,HTML)通过标签语言来标记要显示的网页中的各个部分.一套规则,浏览器认识的规则 2. 浏览器按顺序渲染网 ...

  10. 洛谷 - P1118 - 数字三角形 - next_permutation

    https://www.luogu.org/problemnew/show/P1118 next_permutation的第二个参数是最后一个元素的下一个元素,sort也是一样!有毒!这么低级的错误. ...