/// <summary> /// Метод, срабатывающий при возникновении события "загрузка формы". /// </summary> private void FrmHEd_Load(object sender, EventArgs e) { // Проверим используемую платформу... Platform = new CurrentPlatform(); // Проверим наличие прав администратора. Если они отсутствуют - отключим функции сохранения... if (!(ProcessManager.IsCurrentUserAdmin())) { HEd_M_Save.Enabled = false; HEd_T_Save.Enabled = false; HEd_M_RestDef.Enabled = false; HEd_Table.ReadOnly = true; HEd_T_Cut.Enabled = false; HEd_T_Paste.Enabled = false; HEd_T_RemRw.Enabled = false; } // Укажем версию в заголовке главной формы... Text = String.Format(Text, PluginVersion); // Определим расположение файла Hosts... HostsFilePath = FileManager.GetHostsFileFullPath(Platform.OS); // Проверим существование файла... if (File.Exists(HostsFilePath)) { // Запишем путь в статусную строку... HEd_St_Wrn.Text = HostsFilePath; // Считаем содержимое... try { ReadHostsToTable(HostsFilePath); } catch (Exception Ex) { CoreLib.HandleExceptionEx(String.Format(AppStrings.AHE_ExceptionDetected, HostsFilePath), PluginName, Ex.Message, Ex.Source, MessageBoxIcon.Warning); } } else { MessageBox.Show(String.Format(AppStrings.AHE_NoFileDetected, HostsFilePath), PluginName, MessageBoxButtons.OK, MessageBoxIcon.Warning); 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); } }