Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
40 / 3 / 1
Регистрация: 24.11.2012
Сообщений: 261

Есть ли какой-то способ определить самую последнюю по времени создания, запись в реестр?

01.03.2020, 13:34. Показов 2732. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Понимаю, что в реестр пишется постоянно. Но мне не нужна точность до секунд и минут. Так-же понимаю, что у "добросовестных" юзеров, эта запись будет датирована текущим днем. Но есть такие "ребята", которые для запуска софта используют всякие манипуляции с датой и временем. Вот это и хочу проверить. То-есть если системное время будет меньше чем последнее обращение к реестру, то не давать софту запускаться.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.03.2020, 13:34
Ответы с готовыми решениями:

Получить самую последнюю запись (по дате)
Здравствуйте. Подскажите, как получить из таблицы SomeSnapshot записи, которые были добавлены в таблицу за самую последнюю дату? ...

Нужно SQL-запросом вернуть самую последнюю добавленную запись
Нужно SQL-запросом вернуть самую последнюю добавленную запись. Такой вариант нормальный? SELECT `message`, `reply` FROM `chat` WHERE `id`...

Как вывести самую последнюю запись при реляции HasMany
в таблице Таскс хранятся Задачи, в таблице Таймс хранятся время их выполнения. Ранее для одной Задачи хранилось только одно время...

29
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
07.03.2020, 22:29
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Рядовой Посмотреть сообщение
Экстрасенсы уже уволились, а мы без вашего кода не могем подсказать. Можно лишь посоветовать писать хороший код, купить мощный проц и т.д.. Код покажите.
Там просто перебор строк большого текстового файла.
Цитата Сообщение от Kuzya69 Посмотреть сообщение
Я, через regedit, экспортировал все родительские ветки реестра в текстовый файл, и искал в нем по дате.
0
40 / 3 / 1
Регистрация: 24.11.2012
Сообщений: 261
07.03.2020, 22:49  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Там просто перебор строк большого текстового файла.
Не, это я для одного случая описал, просто в коде перебора реестра я не составлял список ключей с "непонятными" датами. И чтобы понять, какой ключ дает такую дату я побыстрому экспортировал ключи из regedit в текстовый файл, и уже в нем нашел конкретный ключ.
А так код - обычный перебор корневых веток, а дальше отдаем в функцию с рекурсией по подключам. Надо весь код сюда? Он в принципе на каждом углу валяется. А то лень от ненужных операторов освобождать, там я небольшое логирование веду - подсчет всех обработанных ключей для каждой корневой ветки, время затраченное на каждую корневую ветку, максимальная и минимальная дата для каждой ветки и т.д. и т.п. Но это логирование отключаемое чтобы скорости не сильно мешало.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
07.03.2020, 23:00
Kuzya69, почитал несколько статей про регулировку загрузки процессора.
Одна из них https://stackoverflow.com/ques... o-below-70

Но по сути там предлагается тоже решение о котором я вас сказал сразу - периодически кидаются Слипы в асинхронном методе.
0
40 / 3 / 1
Регистрация: 24.11.2012
Сообщений: 261
08.03.2020, 03:20  [ТС]
Да, снижается. Вставил "Thread.Sleep(1)" на каждый 100-ый ключ, у которого прочитал дату (пропущенные ключи не учитывал). Процентное потребление ресурсов процессора снизилось до 0-30%. Общее время сканирования увеличилось (было 66 сек, стало 82). Зато теперь колебания нагрузки на процессор стали заметны. Если без Sleep-ов более менее ровно стояли на одном месте, то теперь прыгают. Нагрузка до нуля падает, когда ветка "HKEY_LOCAL_MACHINE" сканируется. Подозреваю что это из-за того, что там больше всего сбойных ключей, которые попадают в зону catch, при попытке открытия. На них возникает ошибка 0x8013150A - "Запрошенный доступ к реестру запрещен", их и в regedit-е, под админом, не открыть. Как это связано со Sleep, вообще не понимаю?
Попробую поэкспериментировать с кол-вом прочитанных ключей на 1 Sleep. Но чувствую, что это не поможет.

Добавлено через 34 минуты
Вот, "причесал" слегка код своей рекурсивной функции. Может более понятнее будет.
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
        public void ScanReg(ref DateTime dtMin, ref DateTime dtMax, RegistryKey rKey, RegistryHive rhKey, string pathSubKey, ref uint iAllkeys)
        {
            RegistryKey bKey = null;
            string[] sKeys;
            string sSlash = @"\";
            try
            {
                bKey = rKey.OpenSubKey(pathSubKey, false);
                {
                    if (bKey != null)
                    {
                        sKeys = bKey.GetSubKeyNames();
                        if (sKeys.Length == 0)
                        {
                            var dateModified = RegistryHelper.GetDateModified(rhKey, pathSubKey); // получаем дату ключа. Готовый класс, взял с этого форума
                            if (dateModified.HasValue == true)
                            {
                                if ((iAllkeys % 100) == 0) Thread.Sleep(1);
                                if (DateTime.Compare(dateModified.Value, dtMax) > 0) dtMax = dateModified.Value;  // Max
                                if (DateTime.Compare(dateModified.Value, dtMin) < 0) dtMin = dateModified.Value;  // Min
                                iAllkeys++;
                            }
                        }
                        else
                        {
                            if (pathSubKey == "") { sSlash = @""; }
                            foreach (string sK in sKeys)
                            {
                                ScanReg(ref dtMin, ref dtMax, rKey, rhKey, (pathSubKey + sSlash + sK), ref iAllkeys);
                            }
                        }
                        bKey.Close();
                    }
                }
            }
            catch(Exception ex)
            {
                uint iErr = (uint)Marshal.GetHRForException(ex);
                if(iErr != 0x8013150A) throw ex;
            }
        }
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
08.03.2020, 15:28
Цитата Сообщение от Kuzya69 Посмотреть сообщение
Вот, "причесал" слегка код своей рекурсивной функции. Может более понятнее будет.
C#
1
2
3
4
5
6
7
8
9
10
11
        private DateTime lastTime;
        public void ScanReg(ref DateTime dtMin, ref DateTime dtMax, RegistryKey rKey, RegistryHive rhKey, string pathSubKey, ref uint iAllkeys)
        { 
            /// Может здесь Sleep вставить?
            /// Проверять время сколько прошло после последнего Sleep и если больше
           /// заданного значения, то кидать Sleep(1).
             if ((DateTime.Now - lastTime).Milliseconds > 20)
            { 
                  Thead.Sleep(1);
                  lastTime = DateTime.Now;
            }
1
40 / 3 / 1
Регистрация: 24.11.2012
Сообщений: 261
08.03.2020, 20:21  [ТС]
Да, способ интересный, но с ним гораздо труднее регулировать загрузку. Пришлось поставить в операторе сравнения 5 мс, а для Sleep-а паузу 10 мс. И то, ниже 22% не снижается нагрузка. Пока опробовал только две комбинации цифр. Но зато на разных ОС и компьютерах. Для каждого железа приходится эти данные экспериментально крутить. Но не это главное.
Кажется нашел в чем проблема "плавающей" нагрузки на процессор. Сразу этого не замечал.
Вобщем так. Когда реестр сканируется как положено, без сбойных ключей, то нагрузку на процессор можно регулировать любым из способов (что моим, что вашим). Но когда появляются сбойные ключи, которые попадают в зону catch, и этих ключей много, и идут почти по порядку, с маленьким временным перерывом. В этот момент нагрузка на процессор со стороны исполняемого файла самой программы (в диспетчере задач это ехе-файл самой программы), падает до нуля. Но в этот момент, процессор начинает нагружаться файлом "msvsmon.exe". Причем его нагрузка не регулируется нашими Sleep-ами. И она гораздо выше нагрузки которую мы выставили Sleep-ами для исполнямого файла проги. Отсюда и "качели". А когда я убираю Sleep-ы, то нагрузка от исполняемого файла и от "msvsmon.exe", одинаковая. Поэтому не заметно их переключения.
Тут я сдаюсь, не знаю что предпринять.

Добавлено через 18 минут
Пока только одна мысль в голове крутится. Как запросить у ключа права доступа, перед его открытием? Если права доступа "не мои", то пропускать, чтобы не попадать в исключения. Либо как повысить свои права доступа, до уровня системы. Но это скорее всего не реально, так как моя программа под AnyCPU и на 4-ом фраемворке.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
08.03.2020, 20:42
Цитата Сообщение от Kuzya69 Посмотреть сообщение
Как запросить у ключа права доступа, перед его открытием?
Метод RegistryKey.GetAccessControl
0
40 / 3 / 1
Регистрация: 24.11.2012
Сообщений: 261
08.03.2020, 21:06  [ТС]
Пока нашел только такое:
C#
1
2
3
4
5
6
// Get security information from a registry key.
using (RegistryKey regKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\MyCompany\MyApp"))
{
   RegistrySecurity regSecurity = regKey.GetAccessControl();
   DisplayRegKeySecurityInfo(regSecurity);
}
Но это полная белиберда. Чтобы получить права, на ключ, его надо сначала открыть. А если он как раз и не открывается из-за прав?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
08.03.2020, 21:33
Цитата Сообщение от Kuzya69 Посмотреть сообщение
Но это полная белиберда. Чтобы получить права, на ключ, его надо сначала открыть. А если он как раз и не открывается из-за прав?
Метод RegistryKey.GetAccessControl не попробовали?
0
40 / 3 / 1
Регистрация: 24.11.2012
Сообщений: 261
09.03.2020, 00:18  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Метод RegistryKey.GetAccessControl не попробовали?
Как его пробовать-то? Я выше написал, чтобы этот способ попробовать, нужно сначала ключ открыть, а уже потом "спрашивать" у ключа права. А у меня как раз исключение и срабатывает при открытии ключа.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.03.2020, 00:18

Как вывести самую последнюю запись при реляции HasMany
в таблице Таскс хранятся Задачи, в таблице Таймс хранятся время их выполнения. Ранее для одной Задачи хранилось только одно время...

Какой способ создания двумерного массива корректен
Какой способ создания двумерного массива размером 3×4, заполненного нулями, корректен? A = * 3 ] * 4 A = * 4 ] * 3 A = ] * 4 A = ...

Какой способ выбрать для создания GUI?
Здравствуйте. Необходимо создать проект с графическим интерфейсом. После поиска в интернете информации о возможных способах, передо мной...

Есть ли способ посмотреть историю создания таблиц?
Допустим в рамках бд были созданы разные таблицы в разное время. Есть ли возможность посмотреть . Какая таблица и как она называлась ,...

Какой самый простой способ создания отчета для распечатки datagridview
Здравствуйте все, подскажите как мне просто, не заморачиваясь, вывести на печать данные таблицы datagridviwer? Заранее благодарю


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru