コード例 #1
0
        /// <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);
        }
コード例 #2
0
        // Метод загружает базу
        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);
        }
コード例 #3
0
        // Применение изменений
        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();
        }
コード例 #4
0
        /// <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();
        }
コード例 #5
0
        /// <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);
        }