OOS升级服务

给我们的应用程序做个版本更新服务,展示一个安装程序如何实现自动更新.

  //服务组,添加需要的任何服务
    public enum ServerEnum
    {
        AutoupdateService,//自动升级
        AutoBack,//自动备份
        AutoLog//日志服务
        

    }
    //服务控制器
   public class ServerController
    {
       public void RunServer(ServerEnum ser)
       {
           switch (ser)
           {
               case ServerEnum.AutoupdateService:
                   AutoupdateService auds = new AutoupdateService();
                   auds.Run();
                   break;
               case ServerEnum.AutoBack:
                   break;
               case ServerEnum.AutoLog:
                   break;
               default:
                   break;
           }
       }
       
    }

创建一个升级服务

   //升级服务
  public  class AutoupdateService
    {
      //建立多线程
      private System.Threading.Thread td;
      private System.Threading.ThreadStart ts;


      public void Run()
      { 
          ts = new System.Threading.ThreadStart(this.GetServerXml);
          td = new System.Threading.Thread(ts);
          td.Priority = System.Threading.ThreadPriority.Lowest;
          td.Name = "AutoupdateService";
          td.Start();
          Console.WriteLine("自动服务升级程序在运行");
        
      }


      //
      public void GetServerXml()
      {
          System.Net.WebClient wc = new System.Net.WebClient();
          //从远程地址下载版本信息
          wc.DownloadFile("https://files.cnblogs.com/BABLOVE/Appxml.xml", @"c:\Appxml.xml");
          //解析xml文件,获取地址和版本
          System.Data.DataSet ds = new System.Data.DataSet();
          ds.ReadXml(@"c:\Appxml.xml");
          System.Data.DataTable dt = ds.Tables[0];
          string ver = dt.Rows[0]["version"].ToString();
          string url = dt.Rows[0]["url"].ToString();

          //版本对比
          if (System.Windows.Forms.Application.ProductVersion != ver)
          {
              Uri uri = new Uri(url);
              wc.DownloadFile(new Uri(url), @"c:\" + uri.Segments[uri.Segments.Length - 1].ToString());
              System.Windows.Forms.DialogResult dr = System.Windows.Forms.MessageBox.Show("应用程序已经更新,是否进行安装?", "提示", System.Windows.Forms.MessageBoxButtons.YesNo, System.Windows.Forms.MessageBoxIcon.Information);

              if (dr == System.Windows.Forms.DialogResult.Yes)
              {
                  System.Diagnostics.Process.Start(@"c:\" + uri.Segments[uri.Segments.Length - 1].ToString());
                  System.Windows.Forms.Application.DoEvents();
                  System.Threading.Thread.Sleep(10000);
                  System.Windows.Forms.Application.Exit();
              }
          }

      }
    }

然后是进行服务启动

  /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {

            
            //启动服务组
            Service.ServerController sc = new Service.ServerController();
            sc.RunServer(Service.ServerEnum.AutoupdateService);

            //下面的服务没实现
            sc.RunServer(Service.ServerEnum.AutoBack);
            sc.RunServer(Service.ServerEnum.AutoLog);


            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }

我们可以添加我们想得任何服务,给我们的安装程序实现更新,我们也可以通过做一个漂亮的壳程序做为引导向,来完成整个过程的升级!

demo:https://files.cnblogs.com/BABLOVE/OOS%E5%8D%87%E7%BA%A7%E6%9C%8D%E5%8A%A1.rar

posted @ 2013-09-08 14:13  如梦不是梦  阅读(684)  评论(0编辑  收藏  举报