/// <summary> /// Метод, работающий в отдельном потоке при запуске механизма поиска и удаления. /// </summary> private void RW_Wrk_DoWork(object sender, DoWorkEventArgs e) { // Создаём список файлов для удаления... List <string> DeleteQueue = DetectFilesForCleanup(RemDirs); // Формируем счётчики... int TotalFiles = DeleteQueue.Count; int i = 1, j = 0; // Удаляем файлы из очереди очистки... foreach (string Fl in DeleteQueue) { try { j = (int)Math.Round(((double)i / (double)TotalFiles * (double)100.00), 0); i++; if ((j >= 0) && (j <= 100)) { RW_Wrk.ReportProgress(j); } } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } try { if (File.Exists(Fl)) { File.SetAttributes(Fl, FileAttributes.Normal); File.Delete(Fl); } } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } } // Удаляем пустые каталоги... foreach (string Dir in RemDirs) { FileManager.RemoveEmptyDirectories(Path.GetDirectoryName(Dir)); } }
/// <summary> /// Метод, срабатывающий при нажатии на кнопку "Создать/Закрыть". /// </summary> private void GenerateNow_Click(object sender, EventArgs e) { // Проверим необходим ли нам запуск очистки или закрытие формы... if (!IsCompleted) { // Отключим контролы... GenerateNow.Text = AppStrings.RPB_CptWrk; GenerateNow.Enabled = false; ControlBox = false; // Запускаем асинхронный обработчик... if (!BwGen.IsBusy) { BwGen.RunWorkerAsync(); } else { CoreLib.WriteStringToLog("RepGen Worker is busy. Can't start build sequence."); } } else { // Закрываем форму... Close(); } }
/// <summary> /// Ищет файлы по указанным маскам в указанных каталогах. /// </summary> /// <param name="CleanDirs">Каталоги для выполнения очистки с маской имени</param> /// <param name="IsRecursive">Включает / отключает рекурсивный поиск</param> /// <returns>Возвращает массив с именами файлов и полными путями</returns> public static List <String> ExpandFileList(List <String> CleanDirs, bool IsRecursive) { List <String> Result = new List <String>(); foreach (string DirMs in CleanDirs) { string CleanDir = Path.GetDirectoryName(DirMs); string CleanMask = Path.GetFileName(DirMs); if (Directory.Exists(CleanDir)) { try { DirectoryInfo DInfo = new DirectoryInfo(CleanDir); FileInfo[] DirList = DInfo.GetFiles(CleanMask); foreach (FileInfo DItem in DirList) { Result.Add(DItem.FullName); } if (IsRecursive) { try { List <String> SubDirs = new List <string>(); foreach (DirectoryInfo Dir in DInfo.GetDirectories()) { SubDirs.Add(Path.Combine(Dir.FullName, CleanMask)); } if (SubDirs.Count > 0) { Result.AddRange(ExpandFileList(SubDirs, true)); } } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } } } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } } } return(Result); }
/// <summary> /// Конструктор класса. Читает базу данных в формате XML и заполняет нашу структуру. /// </summary> /// <param name="HUDDbFile">Путь к БД HUD</param> /// <param name="AppHUDDir">Путь к локальному каталогу с HUD</param> public HUDManager(string HUDDbFile, string AppHUDDir) { // Инициализируем наш список... HUDsAvailable = new List <HUDTlx>(); // Получаем полный список доступных HUD для данной игры. Открываем поток... using (FileStream XMLFS = new FileStream(HUDDbFile, FileMode.Open, FileAccess.Read)) { // Загружаем XML из потока... XmlDocument XMLD = new XmlDocument(); XMLD.Load(XMLFS); // Разбираем XML файл и обходим его в цикле... for (int i = 0; i < XMLD.GetElementsByTagName("HUD").Count; i++) { try { if (!Properties.Settings.Default.HUDHideOutdated || XMLD.GetElementsByTagName("IsUpdated")[i].InnerText == "1") { HUDsAvailable.Add(new HUDTlx(AppHUDDir, XMLD.GetElementsByTagName("Name")[i].InnerText, XMLD.GetElementsByTagName("Game")[i].InnerText, XMLD.GetElementsByTagName("URI")[i].InnerText, XMLD.GetElementsByTagName("UpURI")[i].InnerText, XMLD.GetElementsByTagName("IsUpdated")[i].InnerText == "1", XMLD.GetElementsByTagName("Preview")[i].InnerText, XMLD.GetElementsByTagName("LastUpdate")[i].InnerText, XMLD.GetElementsByTagName("Site")[i].InnerText, XMLD.GetElementsByTagName("ArchiveDir")[i].InnerText, XMLD.GetElementsByTagName("InstallDir")[i].InnerText, XMLD.GetElementsByTagName("Hash")[i].InnerText, Path.Combine(AppHUDDir, Path.ChangeExtension(Path.GetFileName(XMLD.GetElementsByTagName("Name")[i].InnerText), ".zip")))); } } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } } } }
/// <summary> /// Метод, работающий в отдельном потоке при запуске механизма распаковки. /// </summary> private void AR_Wrk_DoWork(object sender, DoWorkEventArgs e) { // Начинаем процесс распаковки с выводом индикатора прогресса... if (File.Exists(ArchName)) { using (ZipFile Zip = ZipFile.Read(ArchName)) { // Формируем счётчики... int TotalFiles = Zip.Count; int i = 1, j = 0; // Начинаем распаковку архива... foreach (ZipEntry ZFile in Zip) { try { ZFile.Extract(DestDir, ExtractExistingFileAction.OverwriteSilently); j = (int)Math.Round(((double)i / (double)TotalFiles * (double)100.00), 0); i++; if ((j >= 0) && (j <= 100)) { AR_Wrk.ReportProgress(j); } } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } } } } else { throw new FileNotFoundException("Archive not found.", ArchName); } }
/// <summary> /// Метод, срабатывающий при нажатии на кнопку "Вставить". /// </summary> private void HEd_T_Paste_Click(object sender, EventArgs e) { try { if (Clipboard.ContainsText()) { HEd_Table.Rows[HEd_Table.CurrentRow.Index].Cells[HEd_Table.CurrentCell.ColumnIndex].Value = Clipboard.GetText(); } } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } }
private void WrkChkApp_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { try { // Проверим статус проверки... if (e.Error == null) { // Проверим наличие обновлений для приложения... if (UpMan.CheckAppUpdate()) { UpdAppImg.Image = Properties.Resources.upd_av; UpdAppStatus.Text = String.Format(AppStrings.UPD_AppUpdateAvail, UpMan.AppUpdateVersion); } else { UpdAppImg.Image = Properties.Resources.upd_nx; UpdAppStatus.Text = AppStrings.UPD_AppNoUpdates; UpdateTimeSetApp(); } // Проверим наличие обновлений для базы игр... if (UpMan.CheckGameDBUpdate()) { UpdDBImg.Image = Properties.Resources.upd_av; UpdDBStatus.Text = String.Format(AppStrings.UPD_DbUpdateAvail, UpMan.GameUpdateHash.Substring(0, 7)); } else { UpdDBImg.Image = Properties.Resources.upd_nx; UpdDBStatus.Text = AppStrings.UPD_DbNoUpdates; } // Проверим наличие обновлений для базы HUD... if (UpMan.CheckHUDUpdate()) { UpdHUDDbImg.Image = Properties.Resources.upd_av; UpdHUDStatus.Text = String.Format(AppStrings.UPD_HUDUpdateAvail, UpMan.HUDUpdateHash.Substring(0, 7)); } else { UpdHUDDbImg.Image = Properties.Resources.upd_nx; UpdHUDStatus.Text = AppStrings.UPD_HUDNoUpdates; UpdateTimeSetHUD(); } } else { // Произошла ошибка... UpdAppImg.Image = Properties.Resources.upd_err; UpdAppStatus.Text = AppStrings.UPD_AppCheckFailure; UpdDBImg.Image = Properties.Resources.upd_err; UpdDBStatus.Text = AppStrings.UPD_DbCheckFailure; UpdHUDDbImg.Image = Properties.Resources.upd_err; UpdHUDStatus.Text = AppStrings.UPD_HUDCheckFailure; // Запишем в журнал... CoreLib.WriteStringToLog(e.Error.Message); } } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } }
/// <summary> /// Устанавливает обновление в виде отдельного исполняемого файла. /// </summary> /// <param name="UpdateURL">URL загрузки обновления</param> /// <param name="UpdateHash">Контрольная сумма файла обновления</param> /// <returns>Возвращает true при успешной установке обновления, иначе - false.</returns> private bool InstallBinaryUpdate(string UpdateURL, string UpdateHash) { // Задаём значения переменных по умолчанию... bool Result = false; // Генерируем имя файла обновления... string UpdateFileName = UpdateManager.GenerateUpdateFileName(Path.Combine(AppUserDir, Path.GetFileName(UpdateURL))); // Загружаем файл асинхронно... FormManager.FormShowDownloader(UpMan.AppUpdateURL, UpdateFileName); // Выполняем проверки и устанавливаем обновление... if (File.Exists(UpdateFileName)) { // Проверяем хеш загруженного файла с эталоном... if (FileManager.CalculateFileMD5(UpdateFileName) == UpdateHash) { // Обновляем дату последней проверки обновлений... UpdateTimeSetApp(); // Выводим сообщение об успешном окончании загрузки и готовности к установке обновления... MessageBox.Show(AppStrings.UPD_UpdateSuccessful, Properties.Resources.AppName, MessageBoxButtons.OK, MessageBoxIcon.Information); // Запускаем установку standalone-обновления... try { if (FileManager.IsDirectoryWritable(FullAppPath)) { Process.Start(UpdateFileName); } else { ProcessManager.StartWithUAC(UpdateFileName); } Result = true; } catch (Exception Ex) { CoreLib.HandleExceptionEx(AppStrings.UPD_UpdateFailure, Properties.Resources.AppName, Ex.Message, Ex.Source, MessageBoxIcon.Error); } } else { // Хеш-сумма не совпала, поэтому файл скорее всего повреждён. Удаляем... try { File.Delete(UpdateFileName); } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } // Выводим сообщение о несовпадении контрольной суммы... MessageBox.Show(AppStrings.UPD_HashFailure, Properties.Resources.AppName, MessageBoxButtons.OK, MessageBoxIcon.Error); } } else { // Не удалось загрузить файл обновления. Выводим сообщение об ошибке... MessageBox.Show(AppStrings.UPD_UpdateFailure, Properties.Resources.AppName, MessageBoxButtons.OK, MessageBoxIcon.Warning); } // Повторно запускаем проверку обновлений... CheckForUpdates(); // Возвращаем результат... return(Result); }
/// <summary> /// Метод, срабатывающий при нажатии на кнопку "Копировать". /// </summary> private void HEd_T_Copy_Click(object sender, EventArgs e) { try { if (HEd_Table.Rows[HEd_Table.CurrentRow.Index].Cells[HEd_Table.CurrentCell.ColumnIndex].Value != null) { Clipboard.SetText(HEd_Table.Rows[HEd_Table.CurrentRow.Index].Cells[HEd_Table.CurrentCell.ColumnIndex].Value.ToString()); } } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } }
/// <summary> /// Метод, срабатывающий при нажатии на кнопку перехода к Steam /// профилю выбранного пользователя. /// </summary> private void MM_Steam_Click(object sender, EventArgs e) { try { if (MM_Table.Rows[MM_Table.CurrentRow.Index].Cells[MM_Table.CurrentCell.ColumnIndex].Value != null) { string Value = MM_Table.Rows[MM_Table.CurrentRow.Index].Cells[MM_Table.CurrentCell.ColumnIndex].Value.ToString(); ProcessManager.OpenWebPage(String.Format(Properties.Resources.MM_CommunityURL, Regex.IsMatch(Value, Properties.Resources.MM_SteamID32Regex) ? SteamConv.ConvSid32Sid64(Value) : SteamConv.ConvSidv3Sid64(Value))); } } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } }
/// <summary> /// Метод, срабатывающий при нажатии на кнопку "Удалить строку". /// </summary> private void HEd_T_RemRw_Click(object sender, EventArgs e) { try { foreach (DataGridViewCell Cell in HEd_Table.SelectedCells) { if (Cell.Selected) { HEd_Table.Rows.RemoveAt(Cell.RowIndex); } } } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } }
/// <summary> /// Отображает диалоговое окно менеджера быстрой очистки. /// </summary> /// <param name="Paths">Каталоги для очистки</param> /// <param name="Mask">Маска файлов, подлежащих очистке</param> /// <param name="LText">Текст заголовка</param> /// <param name="CheckBin">Имя бинарника, работа которого будет проверяться перед запуском очистки</param> /// <param name="ResultMsg">Текст сообщения, которое будет выдаваться по завершении очистки</param> /// <param name="BackUpDir">Каталог для сохранения резервных копий</param> /// <param name="ReadOnly">Пользователю будет запрещено изменять выбор удаляемых файлов</param> /// <param name="NoAuto">Включает / отключает автовыбор файлов флажками</param> /// <param name="Recursive">Включает / отключает рекурсивный обход</param> /// <param name="ForceBackUp">Включает / отключает принудительное создание резервных копий</param> public static void FormShowCleanup(List <String> Paths, string LText, string ResultMsg, string BackUpDir, string CheckBin, bool ReadOnly = false, bool NoAuto = false, bool Recursive = true, bool ForceBackUp = false) { try { if (!ProcessManager.IsProcessRunning(Path.GetFileNameWithoutExtension(CheckBin))) { using (FrmCleaner FCl = new FrmCleaner(Paths, BackUpDir, LText, ResultMsg, ReadOnly, NoAuto, Recursive, ForceBackUp)) { FCl.ShowDialog(); } } else { MessageBox.Show(String.Format(AppStrings.PS_AppRunning, CheckBin), Properties.Resources.AppName, MessageBoxButtons.OK, MessageBoxIcon.Warning); } } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } }
/// <summary> /// Метод, срабатывающий при нажатии на кнопку вставки из /// буфера обмена. /// </summary> private void MM_Paste_Click(object sender, EventArgs e) { try { if (Clipboard.ContainsText()) { List <String> Rows = ParseRow(Clipboard.GetText()); foreach (string Row in Rows) { MM_Table.Rows.Add(Row); } } } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } }
/// <summary> /// Метод, срабатывающий при нажатии на кнопку копирования /// строки в буфер обмена. /// </summary> private void MM_Copy_Click(object sender, EventArgs e) { try { StringBuilder SB = new StringBuilder(); foreach (DataGridViewCell Cell in MM_Table.SelectedCells) { if (Cell.Selected) { SB.AppendFormat("{0} ", Cell.Value); } } Clipboard.SetText(SB.ToString()); } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } }
/// <summary> /// Считывает из главного файла конфигурации Steam пути к дополнительным точкам монтирования. /// </summary> private List <String> GetSteamMountPoints() { // Создаём массив, в который будем помещать найденные пути... List <String> Result = new List <String> { FullSteamPath }; // Начинаем чтение главного файла конфигурации... try { // Открываем файл как поток... using (StreamReader SteamConfig = new StreamReader(Path.Combine(FullSteamPath, "config", "config.vdf"), Encoding.Default)) { // Инициализируем буферную переменную... string RdStr; // Читаем поток построчно... while (SteamConfig.Peek() >= 0) { // Считываем строку и сразу очищаем от лишнего... RdStr = SteamConfig.ReadLine().Trim(); // Проверяем наличие данных в строке... if (!(String.IsNullOrWhiteSpace(RdStr))) { // Ищем в строке путь установки... if (RdStr.IndexOf("BaseInstallFolder", StringComparison.CurrentCultureIgnoreCase) != -1) { RdStr = CoreLib.CleanStrWx(RdStr, true, true); RdStr = RdStr.Remove(0, RdStr.IndexOf(" ") + 1); if (!(String.IsNullOrWhiteSpace(RdStr))) { Result.Add(RdStr); } } } } } } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } // Возвращаем сформированный массив... return(Result); }
/// <summary> /// Метод, срабатывающий по окончании работы механизма очистки в отдельном потоке. /// </summary> private void ClnWrk_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { if (e.Error == null) { // Выводим сообщение об успешном окончании очистки... CM_Info.Text = AppStrings.PS_ProgressFinished; MessageBox.Show(SuccessMessage, Properties.Resources.AppName, MessageBoxButtons.OK, MessageBoxIcon.Information); } else { // В случае исключений пишем в отладочный лог... CoreLib.WriteStringToLog(e.Error.Message); } // Закрываем форму... Close(); }
/// <summary> /// Создаёт резервную копию конфигов, имена которых переданы в параметре. /// </summary> /// <param name="Configs">Конфиги для бэкапа</param> /// <param name="BackUpDir">Путь к каталогу с резервными копиями</param> /// <param name="Prefix">Префикс имени файла резервной копии</param> public static void CreateConfigBackUp(List <String> Configs, string BackUpDir, string Prefix) { // Проверяем чтобы каталог для бэкапов существовал... if (!(Directory.Exists(BackUpDir))) { Directory.CreateDirectory(BackUpDir); } // Проверим существование конфигов и запишем в список только имена реально существующих файлов... Configs = GetRealFilesFromList(Configs); // Копируем оригинальный файл в файл бэкапа... try { if (Configs.Count > 0) { CompressFiles(Configs, GenerateBackUpFileName(BackUpDir, Prefix)); } } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } }
/// <summary> /// Метод, срабатывающий по окончании работы механизма загрузки в отдельном потоке. /// </summary> private void DownloaderCompleted(object sender, AsyncCompletedEventArgs e) { // Загрузка завершена. Проверим скачалось ли что-то. Если нет, удалим пустой файл... try { if (File.Exists(LocalFile)) { FileInfo Fi = new FileInfo(LocalFile); if (Fi.Length == 0) { File.Delete(LocalFile); } } } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } // Закроем форму... IsRunning = false; Close(); }
/// <summary> /// Метод, инициирущий процесс загрузки файла из Интернета. /// </summary> private void DownloaderStart(string URI, string FileName) { try { // Проверим существование файла и удалим... if (File.Exists(FileName)) { File.Delete(FileName); } // Начинаем асинхронную загрузку файла... using (WebClient FileDownloader = new WebClient()) { FileDownloader.Headers.Add("User-Agent", Properties.Resources.AppDnlUA); FileDownloader.DownloadFileCompleted += new AsyncCompletedEventHandler(DownloaderCompleted); FileDownloader.DownloadProgressChanged += new DownloadProgressChangedEventHandler(DownloaderProgressChanged); FileDownloader.DownloadFileAsync(new Uri(URI), FileName); } } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } }
public static void OpenExplorer(string FileName, CurrentPlatform.OSType OS) { try { switch (OS) { case CurrentPlatform.OSType.Windows: Process.Start(Properties.Resources.ShBinWin, String.Format("{0} \"{1}\"", Properties.Resources.ShParamWin, FileName)); break; case CurrentPlatform.OSType.Linux: Process.Start(Properties.Resources.AppOpenHandlerLin, String.Format("\"{0}\"", Path.GetDirectoryName(FileName))); break; case CurrentPlatform.OSType.MacOSX: Process.Start(Properties.Resources.AppOpenHandlerMac, String.Format("\"{0}\"", Path.GetDirectoryName(FileName))); break; } } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } }
public static void OpenTextEditor(string FileName, CurrentPlatform.OSType OS) { try { switch (OS) { case CurrentPlatform.OSType.Windows: Process.Start(Properties.Settings.Default.EditorBin, FileName); break; case CurrentPlatform.OSType.Linux: Process.Start(Properties.Resources.AppOpenHandlerLin, FileName); break; case CurrentPlatform.OSType.MacOSX: Process.Start(Properties.Resources.AppOpenHandlerMac, String.Format("{0} \"{1}\"", "-t", FileName)); break; } } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } }
/// <summary> /// Упаковывает файлы, имена которых переданых в массиве, в Zip-архив с /// произвольным именем. /// </summary> /// <param name="Files">Массив с именами файлов, которые будут добавлены в архив</param> /// <param name="ArchiveName">Имя для создаваемого архивного файла</param> /// <returns>В случае успеха возвращает истину, иначе - ложь</returns> public static bool CompressFiles(List <String> Files, string ArchiveName) { try { using (ZipFile ZBkUp = new ZipFile(ArchiveName, Encoding.UTF8)) { ZBkUp.AddFiles(Files, true, String.Empty); ZBkUp.Save(); } } catch (Exception Ex) { try { if (File.Exists(ArchiveName)) { File.Delete(ArchiveName); } } catch (Exception E1) { CoreLib.WriteStringToLog(E1.Message); } CoreLib.WriteStringToLog(Ex.Message); } return(File.Exists(ArchiveName)); }
/// <summary> /// Метод, срабатывающий при нажатии на кнопку преобразования /// формата SteamID. /// </summary> private void MM_Convert_Click(object sender, EventArgs e) { try { foreach (DataGridViewCell Cell in MM_Table.SelectedCells) { string CellText = Cell.Value.ToString(); if (Cell.Selected && Regex.IsMatch(CellText, Properties.Resources.MM_SteamID32Regex)) { Cell.Value = SteamConv.ConvSid32Sidv3(CellText); } else { if (MM_Table.SelectedCells.Count == 1) { MessageBox.Show(AppStrings.MM_ConvRest, Properties.Resources.AppName, MessageBoxButtons.OK, MessageBoxIcon.Warning); } } } } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } }
/// <summary> /// Главный конструктор класса GameManager. /// </summary> /// <param name="App">Экземпляр класса с параметрами приложения</param> public GameManager(CurrentApp App) { // Создаём объекты для хранения базы игр... SourceGames = new List <SourceGame>(); InstalledGames = new List <String>(); // При использовании нового метода поиска установленных игр, считаем их из конфига Steam... List <String> GameDirs = App.SteamClient.FormatInstallDirs(App.Platform.SteamAppsFolderName); // Создаём поток с XML-файлом... using (FileStream XMLFS = new FileStream(Path.Combine(App.FullAppPath, Properties.Resources.GameListFile), FileMode.Open, FileAccess.Read)) { // Создаём объект документа XML... XmlDocument XMLD = new XmlDocument(); // Загружаем поток в объект XML документа... XMLD.Load(XMLFS); // Обходим полученный список в цикле... XmlNodeList XMLNode = XMLD.GetElementsByTagName("Game"); for (int i = 0; i < XMLNode.Count; i++) { try { if (XMLD.GetElementsByTagName("Enabled")[i].InnerText == "1" || !Properties.Settings.Default.HideUnsupportedGames) { SourceGame SG = new SourceGame(XMLNode[i].Attributes["Name"].Value, XMLD.GetElementsByTagName("DirName")[i].InnerText, XMLD.GetElementsByTagName("SmallName")[i].InnerText, XMLD.GetElementsByTagName("Executable")[i].InnerText, XMLD.GetElementsByTagName("SID")[i].InnerText, XMLD.GetElementsByTagName("SVer")[i].InnerText, XMLD.GetElementsByTagName("VFDir")[i].InnerText, App.Platform.OS == CurrentPlatform.OSType.Windows ? XMLD.GetElementsByTagName("HasVF")[i].InnerText == "1" : true, XMLD.GetElementsByTagName("UserDir")[i].InnerText == "1", XMLD.GetElementsByTagName("HUDsAvail")[i].InnerText == "1", App.FullAppPath, App.AppUserDir, App.SteamClient.FullSteamPath, App.Platform.SteamAppsFolderName, App.SteamClient.SteamID, GameDirs); if (SG.IsInstalled) { SourceGames.Add(SG); InstalledGames.Add(SG.FullAppName); } } } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } } } }
/// <summary> /// Метод, информирующий основную форму о прогрессе загрузки файлов, который /// выполняется в отдельном потоке. /// </summary> private void DownloaderProgressChanged(object sender, DownloadProgressChangedEventArgs e) { // Отрисовываем статус в прогресс-баре... try { DN_PrgBr.Value = e.ProgressPercentage; } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } }
/// <summary> /// Сохраняет содержимое редактора на форме в файл Hosts. /// </summary> /// <param name="Path">Путь к файлу Hosts</param> private void WriteTableToHosts(string Path) { using (StreamWriter CFile = new StreamWriter(Path, false, Encoding.Default)) { try { CFile.WriteLine(CoreLib.GetTemplateFromResource(Properties.Resources.AHE_TemplateFile)); } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } foreach (DataGridViewRow Row in HEd_Table.Rows) { if ((Row.Cells[0].Value != null) && (Row.Cells[1].Value != null)) { if (IPAddress.TryParse(Row.Cells[0].Value.ToString(), out IPAddress IPAddr)) { CFile.WriteLine("{0} {1}", IPAddr, Row.Cells[1].Value); } } } } }
/// <summary> /// Сохраняет графические настройки игры в реестр. /// </summary> public void WriteSettings() { // Открываеам ключ реестра для записи... RegistryKey ResKey = Registry.CurrentUser.OpenSubKey(RegKey, true); // Запишем в реестр настройки разрешения экрана... try { ResKey.SetValue(VSettings.ScreenWidth, _ScreenWidth, RegistryValueKind.DWord); } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } try { ResKey.SetValue(VSettings.ScreenHeight, _ScreenHeight, RegistryValueKind.DWord); } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } // Запишем в реестр настройки режима запуска приложения (ScreenWindowed)... try { ResKey.SetValue(VSettings.DisplayMode, _DisplayMode, RegistryValueKind.DWord); } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } // Запишем в реестр настройки детализации моделей... try { ResKey.SetValue(VSettings.ModelDetail, _ModelDetail, RegistryValueKind.DWord); } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } // Запишем в реестр настройки детализации текстур... try { ResKey.SetValue(VSettings.TextureDetail, _TextureDetail, RegistryValueKind.DWord); } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } // Запишем в реестр настройки качества шейдерных эффектов... try { ResKey.SetValue(VSettings.ShaderDetail, _ShaderDetail, RegistryValueKind.DWord); } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } // Запишем в реестр настройки отражений в воде... try { ResKey.SetValue(VSettings.WaterDetail, _WaterDetail, RegistryValueKind.DWord); } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } try { ResKey.SetValue(VSettings.WaterReflections, _WaterReflections, RegistryValueKind.DWord); } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } // Запишем в реестр настройки прорисовки теней... try { ResKey.SetValue(VSettings.ShadowDetail, _ShadowDetail, RegistryValueKind.DWord); } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } // Запишем в реестр настройки коррекции цвета... try { ResKey.SetValue(VSettings.ColorCorrection, _ColorCorrection, RegistryValueKind.DWord); } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } // Запишем в реестр настройки сглаживания... try { ResKey.SetValue(VSettings.AntiAliasing, _AntiAliasing, RegistryValueKind.DWord); } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } try { ResKey.SetValue(VSettings.AntiAliasQuality, _AntiAliasQuality, RegistryValueKind.DWord); } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } try { ResKey.SetValue(VSettings.AntiAliasingMSAA, _AntiAliasing, RegistryValueKind.DWord); } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } try { ResKey.SetValue(VSettings.AntiAliasQualityMSAA, _AntiAliasQuality, RegistryValueKind.DWord); } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } // Запишем в реестр настройки фильтрации... try { ResKey.SetValue(VSettings.FilteringMode, _FilteringMode, RegistryValueKind.DWord); } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } try { ResKey.SetValue(VSettings.FilteringTrilinear, _FilteringTrilinear, RegistryValueKind.DWord); } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } // Запишем в реестр настройки вертикальной синхронизации... try { ResKey.SetValue(VSettings.VSync, _VSync, RegistryValueKind.DWord); } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } // Запишем в реестр настройки размытия движения... try { ResKey.SetValue(VSettings.MotionBlur, _MotionBlur, RegistryValueKind.DWord); } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } // Запишем в реестр настройки режима DirectX... try { ResKey.SetValue(VSettings.DirectXMode, _DirectXMode, RegistryValueKind.DWord); } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } // Запишем в реестр настройки HDR... try { ResKey.SetValue(VSettings.HDRMode, _HDRMode, RegistryValueKind.DWord); } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } // Закрываем открытый ранее ключ реестра... ResKey.Close(); }
/// <summary> /// Метод, работающий в отдельном потоке при запуске механизма создания /// отчёта. /// </summary> private void BwGen_DoWork(object sender, DoWorkEventArgs e) { // Сгенерируем путь для каталога с рапортами... string RepDir = Path.Combine(AppUserDir, "reports"); // Проверим чтобы каталог для рапортов существовал... if (!Directory.Exists(RepDir)) { // Не существует, поэтому создадим... Directory.CreateDirectory(RepDir); } // Генерируем пути к каталогам для вреенных файлов и создаём их... string TempDir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); string CrDt = FileManager.DateTime2Unix(DateTime.Now); if (!Directory.Exists(TempDir)) { Directory.CreateDirectory(TempDir); } // Генерируем именя файлов с полными путями... string RepName = String.Format("report_{0}.{1}", CrDt, "txt"); string ArchName = Path.Combine(RepDir, Path.ChangeExtension(RepName, ".zip")); string HostsFile = FileManager.GetHostsFileFullPath(CurrentPlatform.OSType.Windows); string FNameRep = Path.Combine(TempDir, RepName); string FNameInternal = Path.Combine(AppUserDir, Properties.Resources.DebugLogFileName); string FNameFPSCfg = Path.Combine(TempDir, String.Format("fpscfg_{0}.zip", CrDt)); string FNamePing = Path.Combine(TempDir, String.Format("ping_{0}.log", CrDt)); string FNameTrace = Path.Combine(TempDir, String.Format("traceroute_{0}.log", CrDt)); string FNameIpConfig = Path.Combine(TempDir, String.Format("ipconfig_{0}.log", CrDt)); string FNameRouting = Path.Combine(TempDir, String.Format("routing_{0}.log", CrDt)); string FNameNetStat = Path.Combine(TempDir, String.Format("netstat_{0}.log", CrDt)); string FNameDxDiag = Path.Combine(TempDir, String.Format("dxdiag_{0}.log", CrDt)); // Начинаем сборку отчёта... try { // Генерируем основной отчёт... try { ProcessManager.StartProcessAndWait("msinfo32.exe", String.Format("/report \"{0}\"", FNameRep)); } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } // Если пользователь вдруг отменил его создание, больше ничего не делаем... if (File.Exists(FNameRep)) { // Запускаем последовательность... try { ProcessManager.StartProcessAndWait("dxdiag.exe", String.Format("/t {0}", FNameDxDiag)); } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } /* DxDiag неадекватно реагирует на кавычки в пути. */ try { if (SelectedGame.FPSConfigs.Count > 0) { FileManager.CompressFiles(SelectedGame.FPSConfigs, FNameFPSCfg); } } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } try { ProcessManager.StartProcessAndWait("cmd.exe", String.Format("/C ping steampowered.com > \"{0}\"", FNamePing)); } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } try { ProcessManager.StartProcessAndWait("cmd.exe", String.Format("/C tracert steampowered.com > \"{0}\"", FNameTrace)); } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } try { ProcessManager.StartProcessAndWait("cmd.exe", String.Format("/C ipconfig /all > \"{0}\"", FNameIpConfig)); } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } try { ProcessManager.StartProcessAndWait("cmd.exe", String.Format("/C netstat -a > \"{0}\"", FNameNetStat)); } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } try { ProcessManager.StartProcessAndWait("cmd.exe", String.Format("/C route print > \"{0}\"", FNameRouting)); } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } try { // Создаём Zip-архив... using (ZipFile ZBkUp = new ZipFile(ArchName, Encoding.UTF8)) { // Добавляем в архив созданный рапорт... if (File.Exists(FNameRep)) { ZBkUp.AddFile(FNameRep, "report"); } // Добавляем в архив все конфиги выбранной игры... if (Directory.Exists(SelectedGame.FullCfgPath)) { ZBkUp.AddDirectory(SelectedGame.FullCfgPath, "configs"); } if (SelectedGame.IsUsingVideoFile) { string GameVideo = SelectedGame.GetActualVideoFile(); if (File.Exists(GameVideo)) { ZBkUp.AddFile(GameVideo, "video"); } } // Добавляем в архив все краш-дампы и логи Steam... if (Directory.Exists(Path.Combine(FullSteamPath, "dumps"))) { ZBkUp.AddDirectory(Path.Combine(FullSteamPath, "dumps"), "dumps"); } if (Directory.Exists(Path.Combine(FullSteamPath, "logs"))) { ZBkUp.AddDirectory(Path.Combine(FullSteamPath, "logs"), "logs"); } // Добавляем содержимое файла Hosts... if (File.Exists(HostsFile)) { ZBkUp.AddFile(HostsFile, "hosts"); } // Добавляем в архив отчёты утилит ping, трассировки и т.д. if (File.Exists(FNamePing)) { ZBkUp.AddFile(FNamePing, "system"); } if (File.Exists(FNameTrace)) { ZBkUp.AddFile(FNameTrace, "system"); } if (File.Exists(FNameIpConfig)) { ZBkUp.AddFile(FNameIpConfig, "system"); } if (File.Exists(FNameRouting)) { ZBkUp.AddFile(FNameRouting, "system"); } if (File.Exists(FNameNetStat)) { ZBkUp.AddFile(FNameNetStat, "system"); } if (File.Exists(FNameDxDiag)) { ZBkUp.AddFile(FNameDxDiag, "system"); } if (File.Exists(FNameFPSCfg)) { ZBkUp.AddFile(FNameFPSCfg, "fps"); } // Добавляем в архив журнал программы... try { if (File.Exists(FNameInternal)) { if (FileManager.GetFileSize(FNameInternal) > 0) { ZBkUp.AddFile(FNameInternal, "srcrep"); } } } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } // Сохраняем архив... ZBkUp.Save(); } // Выводим сообщение об успешном создании отчёта... MessageBox.Show(String.Format(AppStrings.RPB_ComprGen, Path.GetFileName(ArchName)), PluginName, MessageBoxButtons.OK, MessageBoxIcon.Information); // Открываем каталог с отчётами в оболочке и выделяем созданный файл... if (File.Exists(ArchName)) { ProcessManager.OpenExplorer(ArchName, CurrentPlatform.OSType.Windows); } } catch (Exception Ex) { CoreLib.HandleExceptionEx(AppStrings.PS_ArchFailed, Properties.Resources.AppName, Ex.Message, Ex.Source, MessageBoxIcon.Warning); } } // Выполняем очистку... try { // Удаляем не сжатый отчёт... if (File.Exists(FNameRep)) { File.Delete(FNameRep); } // Удаляем временный каталог... if (Directory.Exists(TempDir)) { Directory.Delete(TempDir, true); } } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } } catch (Exception Ex) { // Произошло исключение... CoreLib.HandleExceptionEx(AppStrings.RPB_GenException, PluginName, Ex.Message, Ex.Source, MessageBoxIcon.Warning); } }
public static void OpenWebPage(string URI) { try { Process.Start(URI); } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } }
/// <summary> /// Конструктор класса. Читает базу данных в формате XML и заполняет нашу структуру. /// </summary> /// <param name="CfgDbFile">Путь к БД конфигов</param> /// <param name="LangPrefix">Языковой код</param> public ConfigManager(string CfgDbFile, string LangPrefix) { // Инициализируем список... Configs = new List <CFGTlx>(); // Получаем полный список доступных конфигов. Открываем поток... using (FileStream XMLFS = new FileStream(CfgDbFile, FileMode.Open, FileAccess.Read)) { // Загружаем XML из потока... XmlDocument XMLD = new XmlDocument(); XMLD.Load(XMLFS); // Разбираем XML файл и обходим его в цикле... for (int i = 0; i < XMLD.GetElementsByTagName("Config").Count; i++) { try { Configs.Add(new CFGTlx(XMLD.GetElementsByTagName("Name")[i].InnerText, XMLD.GetElementsByTagName("FileName")[i].InnerText, XMLD.GetElementsByTagName(LangPrefix)[i].InnerText, XMLD.GetElementsByTagName("SupportedGames")[i].InnerText.Split(';'))); } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } } } }