public void RewriteLastToNewSettingsLauncher(LauncherSettingSerializer thisSet, LauncherSettingLastSerializer lastSet, string key, string path) { if (lastSet.InfoInstallPrograms != null) { var progs = new List <SettingSerializer>(lastSet.InfoInstallPrograms.Count()); foreach (var prog in lastSet.InfoInstallPrograms) { progs.Add(new SettingSerializer() { Name = prog.Name, Dep = prog.Dep, Version = prog.Version, Path = prog.Path, StartApp = prog.StartApp, PathFiles = prog.PathFiles, PathDirectories = prog.PathDirectories, PathRegistryKeys = prog.PathRegistryKeys }); } thisSet.InfoInstallPrograms = progs; } Write(thisSet, key, path); }
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(); }
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(); }
static void Main(string[] args) { var programId = (int)ProgramId.Error; string nameZip = null; Console.WriteLine("Программа создает настройки для программы"); do { Console.Write("Для какой программы генерируются настройки(1-Лаунчер,2-Программа): "); int.TryParse(Console.ReadLine(), out programId); if (programId != (int)ProgramId.Launcher && programId != (int)ProgramId.Program) { Console.WriteLine("Ошибка, введите число 1 или 2"); } }while (programId != (int)ProgramId.Launcher && programId != (int)ProgramId.Program); if (programId == (int)ProgramId.Launcher) { var setHelp = new SettingHelper(); var parserPath = new ParserPathHelper(); var setLauncher = new LauncherSettingSerializer(); setLauncher.Info = new SettingSerializer(); Console.WriteLine("Создается файл настроек для Лаунчера"); Console.Write("Name = "); setLauncher.Info.Name = Console.ReadLine(); Console.Write("Version = "); setLauncher.Info.Version = Console.ReadLine(); Console.Write("StartApp = "); setLauncher.Info.StartApp = Console.ReadLine(); var isValid = false; do { try { Console.Write("DepId(0-Лаунчер) = "); setLauncher.Info.Dep = int.Parse(Console.ReadLine()); isValid = true; } catch (ArgumentNullException) { isValid = false; } catch (FormatException) { isValid = false; } catch (OverflowException) { isValid = false; } if (!isValid) { Console.WriteLine("Введите целое число"); } }while (!isValid); Console.WriteLine("Следующие данные вводить в формате {\"Paths\": [\"path\", ...]}, при этом экранирование вводить вручную\nЕсли нечего вводить то просто Enter"); do { isValid = false; Console.Write("PathFiles = "); try { setLauncher.Info.PathFiles = parserPath.ParseToObj <Files>(Console.ReadLine()); isValid = true; } catch (ArgumentException) { isValid = false; } if (!isValid) { Console.WriteLine("Неверный формат введеных данных"); } }while (!isValid); do { isValid = false; Console.Write("PathDirectories = "); try { setLauncher.Info.PathDirectories = parserPath.ParseToObj <Directories>(Console.ReadLine()); isValid = true; } catch (ArgumentException) { isValid = false; } if (!isValid) { Console.WriteLine("Неверный формат введеных данных"); } }while (!isValid); do { isValid = false; Console.Write("PathRegistries = "); try { setLauncher.Info.PathRegistryKeys = parserPath.ParseToObj <Registries>(Console.ReadLine()); isValid = true; } catch (ArgumentException) { isValid = false; } if (!isValid) { Console.WriteLine("Неверный формат введеных данных"); } }while (!isValid); setHelp.Write(setLauncher, CommonConstant.KeySettings, Constant.Path + "\\" + CommonConstant.FileSettingsLauncher); nameZip = Regex.Replace(setLauncher.Info.StartApp, @"[.]\w+", ""); } else { var setHelp = new SettingHelper(); var parserPath = new ParserPathHelper(); var setProgram = new SettingSerializer(); Console.WriteLine("Создается файл настроек для Программы"); Console.Write("Name = "); setProgram.Name = Console.ReadLine(); Console.Write("Version = "); setProgram.Version = Console.ReadLine(); Console.Write("StartApp = "); setProgram.StartApp = Console.ReadLine(); var isValid = false; do { try { Console.Write("DepId(0-Лаунчер) = "); setProgram.Dep = int.Parse(Console.ReadLine()); isValid = true; } catch (ArgumentNullException) { isValid = false; } catch (FormatException) { isValid = false; } catch (OverflowException) { isValid = false; } if (!isValid) { Console.WriteLine("Введите целое число"); } }while (!isValid); Console.WriteLine("Следующие данные вводить в формате {\"Paths\": [\"path\", ...]}, при этом экранирование вводить вручную\nЕсли нечего вводить то просто Enter"); do { isValid = false; Console.Write("PathFiles = "); try { setProgram.PathFiles = parserPath.ParseToObj <Files>(Console.ReadLine()); isValid = true; } catch (ArgumentException) { isValid = false; } if (!isValid) { Console.WriteLine("Неверный формат введеных данных"); } }while (!isValid); do { isValid = false; Console.Write("PathDirectories = "); try { setProgram.PathDirectories = parserPath.ParseToObj <Directories>(Console.ReadLine()); isValid = true; } catch (ArgumentException) { isValid = false; } if (!isValid) { Console.WriteLine("Неверный формат введеных данных"); } }while (!isValid); do { isValid = false; Console.Write("PathRegistries = "); try { setProgram.PathRegistryKeys = parserPath.ParseToObj <Registries>(Console.ReadLine()); isValid = true; } catch (ArgumentException) { isValid = false; } if (!isValid) { Console.WriteLine("Неверный формат введеных данных"); } }while (!isValid); setHelp.Write(setProgram, CommonConstant.KeySettings, Constant.Path + "\\" + CommonConstant.FileSettingsLauncher); nameZip = Regex.Replace(setProgram.StartApp, @"[.]\w+", ""); } var onlyFileSetting = -1; do { Console.Write("Создать только файл настроек?(Да-1,Нет-2): "); int.TryParse(Console.ReadLine(), out onlyFileSetting); if (onlyFileSetting != 1 && onlyFileSetting != 2) { Console.WriteLine("Ошибка, введите число 1 или 2"); } }while (onlyFileSetting != 1 && onlyFileSetting != 2); if (onlyFileSetting == 1) { return; } var zip = new ArchiveHelper(); zip.CreateZipFromPath(Constant.Path, nameZip); var bytesSZip = File.ReadAllBytes(nameZip + ".zip"); var crypt1 = new Crypt(Encoding.UTF8.GetBytes(CommonConstant.Key)); var res1 = crypt1.Encode(bytesSZip); crypt1.AddToDataIv(ref res1); using (var file = File.Create(nameZip + ".zip")) { file.Write(res1, 0, res1.Length); } Console.WriteLine("Архив успешно создан"); Directory.Delete(Constant.Path, true); while (Directory.Exists(Constant.Path)) { Thread.Sleep(100); } Directory.CreateDirectory(Constant.Path); while (!Directory.Exists(Constant.Path)) { Thread.Sleep(100); } File.Move(nameZip + ".zip", Constant.Path + "\\" + nameZip + ".zip"); while (!File.Exists(Constant.Path + "\\" + nameZip + ".zip")) { Thread.Sleep(100); } }