private async void UpdateProgram()
        {
            var programInfo = new ProgramInfoSerializer();

            _mainWindowVeiwModel.CheckProgramTimer.Stop();
            _mainWindowVeiwModel.IsEnabledTable = false;
            var net = new Net();

            var setHelp = new SettingHelper();
            SettingSerializer         selectProgram = null;
            LauncherSettingSerializer launcherSet   = null;

            try
            {
                launcherSet = setHelp.Read <LauncherSettingSerializer>(CommonConstant.KeySettings, CommonConstant.FileSettingsLauncher);

                selectProgram = launcherSet.InfoInstallPrograms?.FirstOrDefault(p => p.Dep == _mainWindowVeiwModel.SelectedRow.Dep);
                if (selectProgram == null)
                {
                    MessageBox.Show(Constant.NotFoundInstallProgram);
                    _mainWindowVeiwModel.IsEnabledTable = true;
                    return;
                }
            }
            catch (Exception ex)
            {
                if (ex is DirectoryNotFoundException || ex is FileNotFoundException)
                {
                    MessageBox.Show(CommonConstant.NotFoundFileSettings);
                }
                else
                {
                    MessageBox.Show(CommonConstant.ErrorReadOrWriteSettings);
                }
                Application.Current.Shutdown();
                return;
            }

            programInfo.dep = _mainWindowVeiwModel.SelectedRow.Dep;



            var request = await net.RequestAsync(
                Constant.UrlGetProgram,
                Net.Post,
                programInfo,
                _mainWindowVeiwModel.Auth,
                null,
                (s, e) =>
            {
                _mainWindowVeiwModel.ProgressValue = e.BytesReceived * 100 / e.TotalBytesToReceive;
            });

            if (request.detail != null)
            {
                _mainWindowVeiwModel.CheckProgramTimer.Start();
                MessageBox.Show(ErrorParser.Parse(request.detail));
                _mainWindowVeiwModel.IsEnabledTable = true;
                return;
            }

            var cryptBytesProgram = Convert.FromBase64String(request.data);


            if (Hash.Sha256Bytes(cryptBytesProgram) == request.hash)
            {
                var crypt = new Crypt(Encoding.UTF8.GetBytes(CommonConstant.Key));
                crypt.RemoveAndSetIv(ref cryptBytesProgram);

                var bytesLauncher = crypt.Decode(cryptBytesProgram);


                try
                {
                    setHelp.RemoveProgram(selectProgram.Path, true);
                    setHelp.RemoveDumps <SettingSerializer, IRemoveData>(selectProgram);
                }
                catch (DirectoryNotFoundException)
                {
                    MessageBox.Show(Constant.NotFoundFileOrDirectoryWithProgram);
                }
                catch (FileNotFoundException)
                {
                    MessageBox.Show(Constant.NotFoundFileOrDirectoryWithProgram);
                }


                var zip = new ArchiveHelper();

                var bytesProgramSetting = zip.Extract(bytesLauncher, request.hash);

                var getProgramSetting = setHelp.Read <SettingSerializer>(bytesProgramSetting, CommonConstant.KeySettings);

                getProgramSetting.Path = request.hash;


                var instalProgs = launcherSet.InfoInstallPrograms.ToList();
                for (int i = 0; i < instalProgs.Count; i++)
                {
                    if (instalProgs[i].Dep == getProgramSetting.Dep)
                    {
                        instalProgs[i] = getProgramSetting;
                        break;
                    }
                }


                setHelp.Write(launcherSet, CommonConstant.KeySettings, CommonConstant.FileSettingsLauncher);

                _mainWindowVeiwModel.SelectedRow.SetStateAfterUpdate();
                _mainWindowVeiwModel.SelectedRow.Status  = StatusHelper.InstallAndUpdated;
                _mainWindowVeiwModel.SelectedRow.Version = getProgramSetting.Version;
                _mainWindowVeiwModel.ProgressValue       = 0;
            }
            else
            {
                MessageBox.Show(Constant.NoHashEqual);
            }
            _mainWindowVeiwModel.IsEnabledTable = true;
            _mainWindowVeiwModel.CheckProgramTimer.Start();
        }
        private async void DownloadInstallProgram()
        {
            _mainWindowVeiwModel.IsEnabledTable = false;
            _mainWindowVeiwModel.CheckProgramTimer.Stop();
            var selectedRow = _mainWindowVeiwModel.SelectedRow;

            var programInfo = new ProgramInfoSerializer();

            var net = new Net();

            var setHelp = new SettingHelper();
            LauncherSettingSerializer launcherSet = null;

            try
            {
                launcherSet = setHelp.Read <LauncherSettingSerializer>(CommonConstant.KeySettings, CommonConstant.FileSettingsLauncher);
            }
            catch (Exception ex)
            {
                if (ex is DirectoryNotFoundException || ex is FileNotFoundException)
                {
                    MessageBox.Show(CommonConstant.NotFoundFileSettings);
                }
                else
                {
                    MessageBox.Show(CommonConstant.ErrorReadOrWriteSettings);
                }
                Application.Current.Shutdown();
                return;
            }

            programInfo.dep = selectedRow.Dep;


            var request = await net.RequestAsync(
                Constant.UrlGetProgram,
                Net.Post,
                programInfo,
                _mainWindowVeiwModel.Auth,
                null,
                (s, e) =>
            {
                _mainWindowVeiwModel.ProgressValue = e.BytesReceived * 100 / e.TotalBytesToReceive;
            });

            if (request.detail != null)
            {
                _mainWindowVeiwModel.CheckProgramTimer.Start();
                MessageBox.Show(ErrorParser.Parse(request.detail));
                _mainWindowVeiwModel.IsEnabledTable = true;
                return;
            }

            var cryptBytesProgram = Convert.FromBase64String(request.data);


            if (Hash.Sha256Bytes(cryptBytesProgram) == request.hash)
            {
                var crypt = new Crypt(Encoding.UTF8.GetBytes(CommonConstant.Key));
                crypt.RemoveAndSetIv(ref cryptBytesProgram);

                var bytesProgram = crypt.Decode(cryptBytesProgram);


                var zip = new ArchiveHelper();

                var bytesProgramSetting = zip.Extract(bytesProgram, request.hash);


                var getProgramSetting = setHelp.Read <SettingSerializer>(bytesProgramSetting, CommonConstant.KeySettings);

                getProgramSetting.Path = request.hash;


                if (launcherSet.InfoInstallPrograms == null || launcherSet.InfoInstallPrograms?.Count() == 0)
                {
                    launcherSet.InfoInstallPrograms = new List <SettingSerializer>()
                    {
                        getProgramSetting
                    };
                }
                else
                {
                    (launcherSet.InfoInstallPrograms as List <SettingSerializer>).Add(getProgramSetting);
                }


                setHelp.Write(launcherSet, CommonConstant.KeySettings, CommonConstant.FileSettingsLauncher);

                _mainWindowVeiwModel.SelectedRow.SetStateAfterDownloadAndInstall();
                _mainWindowVeiwModel.SelectedRow.Status = StatusHelper.InstallAndUpdated;
                _mainWindowVeiwModel.ProgressValue      = 0;
            }
            else
            {
                MessageBox.Show(Constant.NoHashEqual);
            }
            _mainWindowVeiwModel.IsEnabledTable = true;
            _mainWindowVeiwModel.CheckProgramTimer.Start();
        }