天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

ClickOnce DIY全自動(dòng)更新下載升級(jí)的自我實(shí)現(xiàn)

SmartClient概念近來比較熱,但在微軟提出這個(gè)名詞以前已經(jīng)有大量的軟件在這么做了,一方面是簡(jiǎn)化客戶端的部署,一方面是提供自動(dòng)升級(jí)的功能;對(duì)于傳統(tǒng)的WinForm應(yīng)用來講,確實(shí)是可以降低維護(hù)成本的一個(gè)不錯(cuò)的解決方案;
 微軟在推出SmartClient概念時(shí),推出了相關(guān)的updater的Application Block,做的也蠻不錯(cuò),但作者前段還是根據(jù)軟件特性自己寫了一個(gè)很簡(jiǎn)單的實(shí)現(xiàn),大家也大概能了解一下原理:
筆者的簡(jiǎn)化版自動(dòng)升級(jí)管理器只需要四步走:
1.一個(gè)負(fù)責(zé)查找和下載新版本的本地類
2.本地配置文件中(或在代碼中硬編碼?不太好吧),指向更新服務(wù)器的URL
3.服務(wù)器上一個(gè)標(biāo)識(shí)版本號(hào)和新文件URL的配置文件
4.調(diào)用示例
1.版本管理類
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.NET;
using System.IO;
using System.Windows.Forms;
namespace Survey
{
    class VersionAgent
    {
        public static bool CheckNETwork()
        {
            HttpWebRequest request;
            try
            {
                request = (HttpWebRequest)WebRequest.Create(Pub.GetSetting("UpdateUrl") );//從本地配置文件獲取的網(wǎng)絡(luò)中配置文件的URL
                request.Proxy = WebProxy.GetDefaultProxy();
                request.GetResponse();//如果可以獲得響應(yīng),說明網(wǎng)絡(luò)沒問題
            }
            catch (Exception e)
            {
                Pub.logError(e);
                return false;
            }
            return true;
        }

        public static bool CheckUpdate()
        {
            XmlDocument doc = loadXMLDocument(Pub.GetSetting("UpdateUrl"));
            Sys.UpdateUrl = GetValue(doc, "DownloadURL").Trim();//將來會(huì)用這個(gè)URL自動(dòng)下載 
            Sys.UpdatePage = GetValue(doc, "DownloadPage").Trim();//如自動(dòng)下載失敗,會(huì)提供到這個(gè)頁面手工下載
            string warningRate = GetValue(doc, "WarningRate").Trim();
            float.TryParse(warningRate,out Sys.WarningRate);
            string NETVersion = GetValue(doc, "Version").Trim();
Version LocalVersion=System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
            return new Version(NETVersion).CompareTo(new Version(LocalVersion))>0;//大于0說明有新版本發(fā)布
        }//這個(gè)方法是載入網(wǎng)絡(luò)配置文件,讀取一些不想放在本地的配置參數(shù),以及比較本地和網(wǎng)絡(luò)版本號(hào)
        public static bool GoUpdate()
        {
          return DownLoadFile(Sys.UpdateFile,Sys.UpdateUrl);

        }
        public static string GetValue(XmlDocument doc, string Key)
        {
            string Value;
            try
            {
                XmlElement elem = (XmlElement)doc.SelectSingleNode(@"/config/app/" + Key);//讀取配置文件可自行定義
                Value = elem == null ? "" : elem.GetAttribute("value"); 
            }
            catch
            {
                Value = "";
            }
            return Value;
        }
        public static XmlDocument loadXMLDocument(string FileNameOrUrl)
        {
            XmlDocument doc = null;
            try
            {
                doc = new XmlDocument();
                doc.Load( FileNameOrUrl);
            }
            catch (Exception e)
            {
                System.Windows.Forms.MessageBox.Show(e.Message);
                Pub.logError(e);
                doc = null;
            }
            return doc;
        }

        public static bool DownLoadFile(string FileName, string Url)
        {
            bool Value = false;
            WebResponse response = null;
            Stream stream = null;
            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
                response = request.GetResponse();
                stream = response.GetResponseStream();
                if (!response.ContentType.ToLower().StartsWith("text/"))
                {
                    Value = SaveBinaryFile(response, FileName);
                }
            }
            catch (Exception e)
            {
               // System.Windows.Forms.MessageBox.Show(e.Message);
                Pub.logError(e);
            }
            return Value;
        }

        private static bool SaveBinaryFile(WebResponse response, string FileName)
        {
            bool Value = true;
            byte[] buffer = new byte[1024];
            try
            {
                if (File.Exists(FileName))
                    File.Delete(FileName);
                Stream outStream = System.IO.File.Create(FileName);
                Stream inStream = response.GetResponseStream();
                int l;
                do
                {
                    l = inStream.Read(buffer, 0, buffer.Length);
                    if (l > 0)
                        outStream.Write(buffer, 0, l);
                }
                while (l > 0);
                outStream.Close();
                inStream.Close();
            }
            catch (Exception e)
            {
                System.Windows.Forms.MessageBox.Show(e.Message);
                Pub.logError(e);
                Value = false;
            }
            return Value;
        }
    }
}
2.本地配置文件可能如:
<configuration>
  <appSettings>
    <add key="UpdateUrl" value="http://www.abc.com/download/release.xml" />
  </appSettings>
</configuration>
3.網(wǎng)絡(luò)配置文件可能如:
<config>
  <app>
    <Version value="1.1.9.2" />
    <ReleaseDate value="2006-12-12" />
    <DownloadPage value="http://www.abc.com/download/index.htm" />
    <DownloadURL value="http://www.abc.com/download/update.exe" />
   <WarningRate value="0.3" />
  </app>
</config>
4.調(diào)用示例
在認(rèn)為合適的時(shí)機(jī)(比如說應(yīng)用程序啟動(dòng)時(shí)),啟動(dòng)一個(gè)后臺(tái)線程去工作:
            Thread thread = new Thread(new ThreadStart(threadMethodUpdate));
            thread.Start();

        private void threadMethodUpdate()
        {

            if (VersionAgent.CheckNETwork())//網(wǎng)絡(luò)狀況正常
            {
                if (VersionAgent.CheckUpdate())//檢查更新并獲取網(wǎng)絡(luò)參數(shù)
                {
                    if (VersionAgent.GoUpdate())//獲取新版本(由于我的軟件很小,所以在不提示用戶的情況就進(jìn)行了新版下載,如認(rèn)為不妥,可通過MessageBox提示一下)
                    {
                        MessageBox.Show("檢測(cè)到產(chǎn)品的更新版本,即將開始自動(dòng)更新!", "版本升級(jí)", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        System.Diagnostics.Process.Start(Sys.UpdateFile);
                        System.Environment.Exit(0);
                    }
                    else
                    {
                        MessageBox.Show("系統(tǒng)檢測(cè)到更新版本,但自動(dòng)下載失敗,點(diǎn)擊確定進(jìn)行手動(dòng)下載", "版本升級(jí)", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        System.Diagnostics.Process.Start(Sys.UpdatePage);
                        System.Environment.Exit(0);
                    }
                }
            }
            else//也可以什么也不提示
                MessageBox.Show("無法連接到服務(wù)器進(jìn)行自動(dòng)升級(jí)!/n請(qǐng)檢查網(wǎng)絡(luò)連接 " + Pub.GetSetting("UpdateUrl"), "網(wǎng)絡(luò)異常", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }

AspNet技術(shù)ClickOnce DIY全自動(dòng)更新下載升級(jí)的自我實(shí)現(xiàn),轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 无限资源日本2019版 | cctv网站| 仓井空torrent | 无人区日本电影在线观看 | 久久婷婷五月综合色丁香花 | 久久日本片精品AAAAA国产 | 亚洲AV中文字幕无码久久 | 就操成人网 | 胸太大被男同桌吃好爽 | 国产自产视频在线观看香蕉 | 肉肉的各种姿势高H细文 | 综合色就爱涩涩涩综合婷婷 | 一一本之道高清视频在线观看中文字幕 | 亚洲第一页视频 | 亚洲日韩精品AV中文字幕 | 男女啪啪抽搐呻吟高潮动态图 | 尤蜜网站在线进入免费 | 内射人妻无码色AV麻豆去百度搜 | 在线亚洲中文字幕36页 | 美丽的姑娘BD在线观看 | 免费麻豆国产黄网站在线观看 | 娇喘高潮教室h | 色综合久久88一加勒比 | 午夜理论片YY4399影院 | 亚洲AV无码专区国产精品麻豆 | 亚洲字幕在线观看 | 国产黄A片在线观看永久免费麻豆 | 99re 这里只有精品 | 56prom在线精品国产 | 最新无码专区在线视频 | 强开乳罩摸双乳吃奶视频 | 久久影院毛片一区二区 | 女警被黑人20厘米强交 | 日日摸夜夜添夜夜爽出水 | 亚洲欧美偷拍视频一区 | 黑人巨茎vide抽搐 | 久久天天婷婷五月俺也去 | 色噜噜视频影院 | 日本久久网站 | 浪货嗯啊趴下NP粗口黄暴 | 手机在线亚洲日韩国产 |