/// <summary> /// Метод добавляет реестровую запись в базу /// </summary> /// <param name="Entry">Реестровая запись для добавления</param> /// <returns>Возвращает true в случае успеха</returns> public bool AddEntry(RegistryEntry Entry) { if (!isInited || !Entry.IsValid) { return(false); } entries.Add(Entry); return(changed = true); }
// Метод загружает базу private bool LoadBase() { // Попытка открытия файла try { FS = new FileStream(BasesSubdirectory + "\\" + baseName + BaseFileExtension, FileMode.Open); } catch { return(false); } SR = new StreamReader(FS, baseFileEncoding); // Чтение файла SR.ReadLine(); // Версия while (!SR.EndOfStream) { string s = SR.ReadLine(); string[] values = s.Split(baseFileSplitters); // Пустые поля не удалять, т.к. они отвечают за значения по умолчанию if (values.Length != 6) { continue; // Если вдруг попадётся битая запись, пропустить её } RegistryValueTypes valueType = RegistryValueTypes.REG_SZ; try { valueType = (RegistryValueTypes)uint.Parse(values[3]); } catch { } RegistryEntry re = new RegistryEntry(values[0], values[1], values[2], valueType, values[4] != "0", values[5] != "0"); if (!re.IsValid) { continue; // Аналогично } // В противном случае добавляем запись entries.Add(re); } // Завершено SR.Close(); FS.Close(); return(true); }
// Применение изменений private void Apply_Click(object sender, EventArgs e) { // Проверка записи на корректность RegistryEntry re = new RegistryEntry(KeyPath.Text, KeyName.Text, KeyObject.Text, (RegistryValueTypes)KeyType.SelectedIndex, PathMustBeDeleted.Checked, NameMustBeDeleted.Checked); if (!re.IsValid) { MessageBox.Show(Localization.GetText("EntryIsIncorrect", al), ProgramDescription.AssemblyTitle, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } // Успешно editedEntry = (RegistryEntry)re.Clone(); confirmed = true; this.Close(); }
/// <summary> /// Конструктор. Запускает создание или редактирование записи /// </summary> /// <param name="Entry">Запись реестра</param> /// <param name="InterfaceLanguage">Язык интерфейса</param> public RegistryEntryEditor(RegistryEntry Entry, SupportedLanguages InterfaceLanguage) { // Инициализация InitializeComponent(); al = InterfaceLanguage; this.AcceptButton = Apply; this.CancelButton = Abort; // Сохранение параметров editedEntry = Entry; // Настройка контролов KeyType.Items.Add(RegistryValueTypes.REG_SZ.ToString() + Localization.GetText("RegistryValue_String", al)); KeyType.Items.Add(RegistryValueTypes.REG_DWORD.ToString() + Localization.GetText("RegistryValue_Int32", al)); KeyType.Items.Add(RegistryValueTypes.REG_QWORD.ToString() + Localization.GetText("RegistryValue_Int64", al)); if ((int)editedEntry.ValueType < KeyType.Items.Count) { KeyType.Text = KeyType.Items[(int)editedEntry.ValueType].ToString(); } else { KeyType.Text = KeyType.Items[0].ToString(); } // Загрузка записи KeyPath.Text = editedEntry.ValuePath; KeyName.Text = editedEntry.ValueName; KeyObject.Text = editedEntry.ValueObject; PathMustBeDeleted.Checked = editedEntry.PathMustBeDeleted; NameMustBeDeleted.Checked = editedEntry.NameMustBeDeleted; // Локализация this.Text = ProgramDescription.AssemblyTitle + Localization.GetText("REE_Title", al); Localization.SetControlsText(this, al); Apply.Text = Localization.GetText("ApplyButton", al); Abort.Text = Localization.GetText("AbortButton", al); // Запуск this.ShowDialog(); }
/// <summary> /// Метод загружает файл реестра в базу /// </summary> /// <param name="FileName"></param> /// <returns></returns> public uint LoadRegistryFile(string FileName) { // Контроль if (!isInited) { return(0); } // Попытка открытия файла try { FS = new FileStream(FileName, FileMode.Open); } catch { return(0); } SR = new StreamReader(FS, registryFileEncoding); // Контроль состава файла string s = SR.ReadLine().ToLower(), s2; if (!s.Contains("regedit") && !s.Contains("windows registry")) // Заодно исключает возможные проблемы с кодировкой { return(0); } // Начало чтения uint entriesCounter = 0; string currentPath = ""; while (!SR.EndOfStream) { s = SR.ReadLine(); if (s.Length == 0) { continue; } // Определение путей к разделам реестра if (s.Substring(0, 1) == "[") { currentPath = s; // Проверяем, не содержит ли путь пометку на удаление RegistryEntry re = new RegistryEntry(s, "\\", ""); if (re.IsValid) // В таком варианте запись будет валидна только и исключительно в случае наличия пометки { entries.Add(re); entriesCounter++; } // Здесь больше ничего нет continue; } // Определение параметров реестра if (s.Length > 0) { // Проверяем наличие сплиттера int indexOfSplitter = s.IndexOf(registryFileSplitter); if ((indexOfSplitter <= 0) || (indexOfSplitter >= s.Length - 1)) // Сплиттер отсутствует или стоит на краю строки { continue; // (или в обработку попала некорректная строка) } // Пробуем собрать запись s2 = s.Substring(indexOfSplitter + 1); // Сначала нужно обрубить лишние кавычки if (s2.Length >= 2) { if (s2.Substring(0, 1) == "\"") { s2 = s2.Substring(1); } if (s2.Substring(s2.Length - 1, 1) == "\"") { s2 = s2.Substring(0, s2.Length - 1); } } s2 = s2.Replace("\\\"", "\""); s2 = s2.Replace("\\\\", "\\"); RegistryEntry re = new RegistryEntry(currentPath, s.Substring(0, indexOfSplitter), s2); if (!re.IsValid) { continue; } // Успешно. Добавляем в базу entries.Add(re); entriesCounter++; } } // Завершено SR.Close(); FS.Close(); changed = (entriesCounter != 0); return(entriesCounter); }