怎样让程序自动更新

 

       
自动更新的软件的目的在于让客户不在为了追寻最新软件开支时间。也不用去到开发商的网站上查找。客户端的软件自行会在程序运营前寻找服务器上风行的本子。和融洽眼下软件的版本相比较,如若服务器的是流行版本。客户端则开始展览机动下载、解压、安装。当然了下载是要有网络的,并且用户可以依据提醒去完毕操作。再也不用为找不到最新版本的软件而发烧。上面是自身的大约思路,已经得到了落实:

       一、 
写3个webservice,提供1个获取服务器xml中版本的数据的章程。(也可用别的文件格式,
此处举例XML)

       二、 
在WinForm应用程序运转的时候,首先走访webservice获取服务器的xml中的版本号,然后拿走客户端的xml中的版本号。将四个版本号相比,若服务器中的版本号大,则提示提醒能够在线更新应用程序。

       三、 
然后客户端自动下载网络上的RAPAJERO压缩包到本机的钦定地方,进行机动解压缩。解压缩达成之后,用经过打开所解压过的exe文件实行软件设置。同时关闭客户端软件研商所在的经过。

  一   web项目中的代码

     
 首先小编给大家先出示下自家的web项目中的webservice的代码,那之中跟简单,唯有一个方法。项目必要公布到IIS下面。

     一.一 webservice中的代码

          

XML 1XML 2

XML 3😉

 [STAThread]

        static void Main()

        {

            Application.EnableVisualStyles();

            Application.SetCompatibleTextRenderingDefault(false);

            LoadMath();

        }

        private static void LoadMath()

        {

            //服务器上的版本号

            string NewEdition = string.Empty;

            //应用程序中的版本号

            string OldEdition = string.Empty;

            try

            {

                //获取webservice上的版本号

                myService.WebServiceUpdateSoapClient c = new myService.WebServiceUpdateSoapClient();

                NewEdition = c.GetEdition("clkj_ws");

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message);

            }

            try

            {

                //获取系统中xml里面存储的版本号

                XDocument document = XDocument.Load("XMLEdition.xml");

                XElement element = document.XPathSelectElement("Content/Project/Edition");

                if (element != null)

                {

                    OldEdition = element.Value.ToString();

                }

            }

            catch (Exception exx)

            {

                MessageBox.Show(exx.Message);

            }

            double newE = double.Parse(NewEdition);

            double oldE = double.Parse(OldEdition);

            //比较两个版本号,判断应用程序是否要更新

            if (newE > oldE)

            {



                //更新程序¨°

                DialogResult dr = MessageBox.Show("发现新的版本是否要更新该软件", "系统提示?", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);

                if (dr == DialogResult.OK)

                {

                    //打开下载窗口

                    Application.Run(new DownUpdate ());

                }

                else

                {

                    //若用户取消,打开初始界面

                    Application.Run(new Login());

                }

            }

        }

XML 4😉

View
Code

 

  一.二 xml中的代码

      

<?xml version=”1.0″ encoding=”utf-8″ ?>

<Content>

  <Project id=”p1″>

    <Name>test</Name>

    <Edition>2.0</Edition>

  </Project>

</Content>  

二   WinForm项目中的代码

     
Web项目标代码就唯有上边的某个,重点的照旧在WinForm中。在WinForm中首先要添加web引用,将上述的webservice访问地址复制过来使用。下边作者一步一步来为大家解析吧。

   第一步:

     二.一 xml中的代码

   
客户端的代码和劳务器断的xml代码大概相同,区别的只用艾德ition成分里面包车型地铁值。

    <?xml version=”1.0″ encoding=”utf-8″ ?>

      <Content>

        <Project id=”p1“>

          <Name>test</Name>

          <Edition>1.0</Edition>

         </Project>

      </Content>

2.2 Program.cs代码(设置起先页的代码)

在Program.cs(WinForm中设置起首页的地点)那个类中添加代码

 

XML 5😉

 [STAThread]

        static void Main()

        {

            Application.EnableVisualStyles();

            Application.SetCompatibleTextRenderingDefault(false);

            LoadMath();

        }

        private static void LoadMath()

        {

            //服务器上的版本号

            string NewEdition = string.Empty;

            //应用程序中的版本号

            string OldEdition = string.Empty;

            try

            {

                //获取webservice上的版本号

                myService.WebServiceUpdateSoapClient c = new myService.WebServiceUpdateSoapClient();

                NewEdition = c.GetEdition("clkj_ws");

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message);

            }

            try

            {

                //获取系统中xml里面存储的版本号

                XDocument document = XDocument.Load("XMLEdition.xml");

                XElement element = document.XPathSelectElement("Content/Project/Edition");

                if (element != null)

                {

                    OldEdition = element.Value.ToString();

                }

            }

            catch (Exception exx)

            {

                MessageBox.Show(exx.Message);

            }

            double newE = double.Parse(NewEdition);

            double oldE = double.Parse(OldEdition);

            //比较两个版本号,判断应用程序是否要更新

            if (newE > oldE)

            {



                //更新程序¨°

                DialogResult dr = MessageBox.Show("发现新的版本是否要更新该软件", "系统提示?", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);

                if (dr == DialogResult.OK)

                {

                    //打开下载窗口

                    Application.Run(new DownUpdate ());

                }

                else

                {

                    //若用户取消,打开初始界面

                    Application.Run(new Login());

                }

            }

        }

XML 6😉

 

    2.三 Main.cs(登录后的主界面)的代码

           那么些能够总结,未有实际意义

    二.四 DownUpdate.cs(更新页面)的代码

      界面彰显如下图

                  XML 7

自动更新代码如下(在那之中更新按钮的name为btnDown,安装按钮的name为btnInstall):

  

XML 8XML 9

XML 10😉

//debug目录,用于存放压缩文件t
        string path = Application.StartupPath;
        public DownExe()
        {
            InitializeComponent();
        }

        private void DownExe_Load(object sender, EventArgs e)
        {
            btnInstall.Enabled = false;
        }

        //下载文件、自动解压缩文件
        private void btnDown_Click(object sender, EventArgs e)
        {
            //自动下载压缩包,并且解压,最后关闭当前进程,进行安装
            try
            {
                //设置进度条
                List<int> resultList = new List<int>();
                for (int i = 0; i < 100; i++)
                {
                    resultList.Add(i);
                }

                //设置进度条的最大值和最小值
                this.progressBar1.Maximum = resultList.Count;
                this.progressBar1.Minimum = 0;

                foreach (int item in resultList)
                {
                    //下载压缩包
                    System.Net.WebClient client = new System.Net.WebClient();
                    client.DownloadFile(@"http://192.168.1.120/File/setup.rar", path + @"setup.rar");
                    this.progressBar1.Value++;
                }
            }
            catch
            {
                MessageBox.Show("当前没有网络或者文件地址不正确");
            }

            if (!Exists())
            {
                MessageBox.Show("不支持RAR解压缩");
                return;
            }
            //解a压1
            try
            {
                unCompressRAR(path + "\\setup", path, "setup.rar", false);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            btnInstall.Enabled = true;
            btnDown.Enabled = false;
        }

        //打开下载好的exe文件,并且关闭当前客户端所在的进程
        private void btnInstall_Click(object sender, EventArgs e)
        {
            if (File.Exists(path + @"\setup\cboxbeta2.0.0.7.exe"))
            {
                //打开下载好的exe文件
                Process.Start(path + @"\setup\cboxbeta2.0.0.7.exe");
                //关闭当前进程
                Process[] proce = Process.GetProcesses();
                foreach (Process p in proce)
                {
                    //当前运行软件的进程名字
                    if (p.ProcessName == "TestAutoUpdate.vshost")
                    {
                        p.Kill();
                        break;
                    }
                }
            }
        }

        /// <summary>
        /// 解压缩文件t
        /// </summary>
        /// <param name="unRarPatch">解压缩后的文件所要存放的路径?</param>
        /// <param name="rarPatch">rar文件所在的路径</param>
        /// <param name="rarName">rar文件名</param>
        /// <param name="deleteFlag"></param>
        /// <returns></returns>
        public static string unCompressRAR(string unRarPatch, string rarPatch, string rarName, bool deleteFlag)
        {
            try
            {

                RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe");
                string str = key.GetValue("").ToString();
                key.Close();
                if (!System.IO.Directory.Exists(unRarPatch))
                {
                    System.IO.Directory.CreateDirectory(unRarPatch);
                }
                string str2 = "x \"" + rarName + "\" \"" + unRarPatch+"\""+" -y";
                ProcessStartInfo info = new ProcessStartInfo();
                info.FileName = str;
                info.Arguments = str2;
                info.WindowStyle = ProcessWindowStyle.Hidden;
                info.WorkingDirectory = rarPatch;
                Process process = new Process();
                process.StartInfo = info;
                process.Start();
                process.WaitForExit();
                process.Close();
                if (deleteFlag && System.IO.File.Exists(rarPatch + @"\" + rarName))
                {
                    System.IO.File.Delete(rarPatch + @"\" + rarName);
                }
            }
            catch (Exception exception)
            {
                throw exception;
            }
            return unRarPatch;
        }

        /// <summary>
        /// 判读是否支持RAR自动解压缩
        /// </summary>
        /// <returns></returns>
        public static bool Exists()
        {
            return !string.IsNullOrEmpty(Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe").GetValue("").ToString());
        }

XML 11😉

相关文章

网站地图xml地图