private void Downloader(string _URL, string _SaveAs)
        {
            MsgAdd("Запускаю скачивание...");
            ProgressBarMainForm.PerformStep();
            Thread.Sleep(1000);

            WebClient myWebClient      = new WebClient();
            string    downloadFileName = System.IO.Path.GetFileName(_URL);

            try
            {
                myWebClient.DownloadFile(_URL, "_" + downloadFileName);

                while (myWebClient.IsBusy)
                {
                    Application.DoEvents();
                }
            }
            catch (System.Exception exc)
            {
                MsgAdd(exc.Message);
                Log.ExcWrite("[StartUpdate] " + exc.Message);
                Log.log_write("Произошло исключение.Записан статус обновления 0", "[StartUpdate]", "Exception");
                Config.Set("SETTINGS", "UpdateStatus", "0");
                Application.Exit();
            }
            finally
            {
                ProgressBarMainForm.PerformStep();
                Copy(downloadFileName);
            }
        }
        private void StartUpdate()
        {
            ProgressBarMainForm.PerformStep();
            Thread.Sleep(1000);

            try
            {
                string source = GetSourceProgramUpdate();

                if (source != null)
                {
                    Downloader(source, "%TEMP%");
                }
                else
                {
                    throw new Exception("ВНИМАНИЕ! Путь к обновлению не задан на сервере");
                }
            }
            catch (System.Exception ex)
            {
                MsgAdd(ex.Message);
                Log.ExcWrite("[StartUpdate] " + ex.Message);
                Log.log_write("Произошло исключение.Записан статус обновления 0", "[StartUpdate]", "Exception");
                Config.Set("SETTINGS", "UpdateStatus", "0");
                Application.Exit();
            }
        }
        private void Update_Shown(object sender, EventArgs e)
        {
            Thread th = new Thread(delegate()
            {
                MsgAdd("Приложение обновления запущено.");

                ProgressBarMainForm.PerformStep();

                Thread.Sleep(1000);

                int version = GetVersionProgram();

                MsgAdd("Версия на сервере " + version + " .");

                if (version == 0)
                {
                    MsgAdd("Внимание не удалось получить версию обновления на сервере.Записан статус 0.Выход через 10 секунд...");

                    Config.Set("SETTINGS", "UpdateStatus", "0");

                    Thread.Sleep(5000);

                    MsgAdd("Выход через 5 секунд...");

                    Application.Exit();
                }

                StartUpdate();
            });;

            th.Name = "Main thread start";
            th.Start();
        }
        private void StartUpdate()
        {
            ProgressBarMainForm.PerformStep();
            Thread.Sleep(1000);

            try
            {
                string source = GetSourceProgramUpdate();

                if (source != null)
                {
                    Downloader(source, "%TEMP%");
                }
                else
                {
                    throw new Exception("ВНИМАНИЕ! Путь к обновлению не задан на сервере");
                }
            }
            catch (System.Exception ex)
            {
                this.BackColor = Color.Red;

                MsgAdd("[StartUpdate] " + ex.Message);
                Config.Set("SETTINGS", "UpdateStatus", "0");
                Application.Exit();
            }
        }
        private void Downloader(string _URL, string _SaveAs)
        {
            bool s = true;

            MsgAdd("Запускаю скачивание...");

            ProgressBarMainForm.PerformStep();
            Thread.Sleep(1000);

            WebClient myWebClient      = new WebClient();
            string    downloadFileName = System.IO.Path.GetFileName(_URL);

            try
            {
                myWebClient.DownloadFile(_URL, "_" + downloadFileName);

                while (myWebClient.IsBusy)
                {
                    Application.DoEvents();
                }
            }
            catch (System.Exception exc)
            {
                s = false;

                this.BackColor = Color.Red;

                MsgAdd(exc.Message);
                MsgAdd("[Downloader] Произошло исключение.Записан статус обновления 0");

                Log.ExcWrite("[Downloader] " + exc.Message);

                Config.Set("SETTINGS", "UpdateStatus", "0");

                MsgAdd("Неудачно!");

                Thread.Sleep(10000);
                Application.Exit();
            }

            if (s)
            {
                ProgressBarMainForm.PerformStep();
                Copy(downloadFileName);
            }
        }
        private void Update_Shown(object sender, EventArgs e)
        {
            Thread th = new Thread(delegate()
            {
                MsgAdd("Приложение обновления запущено.");

                ProgressBarMainForm.PerformStep();

                Thread.Sleep(1000);

                MsgAdd("Версия на сервере " + GetVersionProgram() + ".");

                StartUpdate();
            });;

            th.Name = "Main thread start";
            th.Start();
        }
        private void Copy(string name)
        {
            try
            {
                MsgAdd("Копирую...");
                ProgressBarMainForm.PerformStep();

                while (File.Exists(name))
                {
                    if (File.Exists("backup_" + name))
                    {
                        File.Delete("backup_" + name);
                        Thread.Sleep(1000);
                    }

                    Log.log_write("Делаем копию файла", "INFO", "update");
                    MsgAdd("Делаем копию файла");
                    File.Move(name, "backup_" + name);
                    Thread.Sleep(1000);

                    Log.log_write("Удаляем оригинальный файл", "INFO", "update");
                    MsgAdd("Удаляем оригинальный файл");
                    File.Delete(name);
                    Thread.Sleep(1000);
                }

                ProgressBarMainForm.PerformStep();

                if (File.Exists("_" + name))
                {
                    File.Copy("_" + name, name);
                    Thread.Sleep(1000);
                }

                if (File.Exists(name))
                {
                    Log.log_write("Запускаем обновленное приложение", "INFO", "update");
                    MsgAdd("Запускаем обновленное приложение");

                    Thread.Sleep(1000);
                    System.Diagnostics.Process.Start(name);

                    Config.Set("SETTINGS", "UpdateStatus", "1");

                    if (File.Exists("_" + name))
                    {
                        File.Delete("_" + name);
                        Log.log_write("Удаляем временный файл", "INFO", "update");
                    }

                    Log.log_write("Выходим из утилиты обновления", "INFO", "update");

                    Application.Exit();
                }
                else
                {
                    Log.ExcWrite("[Copy] Произошло исключение.");

                    //check this
                    RevertUpdate(name);
                }
            }
            catch (System.Exception exс)
            {
                Log.ExcWrite("[Copy] " + exс.Message);
                status = false;

                Config.Set("SETTINGS", "UpdateStatus", "0");
            }
            finally
            {
                if (status)
                {
                    Thread.Sleep(800);
                    Log.log_write("Успешно!", "INFO", "update");
                    ProgressBarMainForm.Value = 100;
                    Thread.Sleep(4000);
                    Application.Exit();
                }
            }
        }