Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.10.2018, 06:51
TEKTON TEKTON вне форума
Новичок
 
Регистрация: 14.03.2011
Сообщения: 60
Репутация: 10
По умолчанию Мониторинг файлов и реестра

Приветствую.
Интересует реализация.
Есть вот всякие унинсталлеры и тому подобные программы которые следят за тем, какие файлы и ключи реестра (скажем при инсталяции) куда записываются.
Большинство делает типа снимок системы => Установка => второй снимок системы и поиск изменений.

Неужели эти программы полностью копируют диск и реестр а потом сравнивают ?
Или там создаётся типа драйвера - перехватчика, который отслеживает все вызовы аля CreateFile, ReadFile...инсталятора и просто их логирует?
Интересует быстродействие процесса создания снимков и сравнения.

Может есть исходники типо таких мониторов?
Спасиб.
Ответить с цитированием
  #2  
Старый 12.10.2018, 07:32
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, реестр относительно невелик, так что можно и скопировать.
По поводу диска. Нет необходимости копировать весь диск. Достаточно просто сделать дерево структуры диска (именя файлов и папок и их размер и дату последнего доступа).

Тебе зачем это надо? А то для файловой системы по крайней мере есть встроенный в систему мониторинг (NotofyEvent), но для этого монитор должен быть активен.
Ответить с цитированием
  #3  
Старый 12.10.2018, 13:35
TEKTON TEKTON вне форума
Новичок
 
Регистрация: 14.03.2011
Сообщения: 60
Репутация: 10
По умолчанию

Привет.
Часто программы устанавливаемые мусор после себя всякий в системе оставляют после удаления.
Что б начисто удалять всё.
Для этого.
Ну и второе,это иногда например надо портаблировать программу, и надо знать про неё всё, куда "ходит", что "смотрит"...
Что б потом все используемые файлы собрать и носить вместе с программой.
Но основное, это конечно "качественная уборка" системы.

Есть очень хорошие проги для этого, например Total Uninstall от Гаврилы (кстати тоже на делфях написана прога).
Делает всё быстро, качественно...

Но программа обрастает лишними функциями, которыми я никогда не пользуюсь.
При этом она платная...

Вот и хотел бы сделать альтернативный "монитор"+ функции отслеживания использования файлов мне не хватает.

Для примера.
Есть у меня некая программа.
Весит, скажем пол гига.
Но я использую только пару функций из неё.
При этом в программе работает только 15 мегабайт всех файлов, остальные валяются бесполезным грузом.

Вот было б очень здорово, что б монитор вёл как бы статистику.
Какие файлы программы- монстра используются постоянно, какие раз в месяц, а какие вообще никогда.
Ну думаю мысль понятна
Нужен шпион за программой что делает в системе, "куда ходит" с "кем дружит"... )))

Последний раз редактировалось TEKTON, 12.10.2018 в 15:31.
Ответить с цитированием
  #4  
Старый 12.10.2018, 20:08
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Просто запомнить какие файлы и ключи реестра трогались при установке, можно и это достаточно легко. Просто перед установкой запоминаем текущее состояние, потом сравниваем с состоянием после установки.

А вот для отслеживания текущих изменений придется все-таки хакать API, т.к. кто открывал файл на файловой системе (и в реестре) не отражается.

Поищи в блоге Rouse, так были хорошие примеры хука API функций.
Т.е. хукаем функции открытия файлов, в хуке выясняем каким процессом отркыт файл/ключ и потом передаем управление самой функции.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
TEKTON (12.10.2018)
  #5  
Старый 12.10.2018, 21:01
TEKTON TEKTON вне форума
Новичок
 
Регистрация: 14.03.2011
Сообщения: 60
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Просто запомнить какие файлы и ключи реестра трогались при установке, можно и это достаточно легко. Просто перед установкой запоминаем текущее состояние, потом сравниваем с состоянием после установки.
А вот как это "просто запомнить" раализовать грамотно?

Цитата:
Сообщение от lmikle
Поищи в блоге Rouse...
А можно ссылочку ?
Ответить с цитированием
  #6  
Старый 12.10.2018, 22:33
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, для файловой системы строим дерево файловых объектов. Т.е. нам надо просто запомнить что и где хранится на диске. Для этого просто делаем вот такую структурку:
Код:
Type
  TFileSysItem=record
    Name : String;
    IsFolder : Boolean;
    Size : Int64;
    AccessDate : TDateTime;
    Items : TList;
  end;
Вообще, там лучше класс сделать, но просто лень.
Зполняем это дерево через рекурсивную функцию с использованием FindFirst/FindNext/FindClose (примеров тьма даже на этом сайте).

С реестром ничего подобного не делал, надо копаться что есть...

по поводу перехвата функций API - см тут: http://alexander-bagel.blogspot.com/...intercept.html

Последний раз редактировалось lmikle, 13.10.2018 в 00:45.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
TEKTON (15.10.2018)
  #7  
Старый 16.10.2018, 08:02
TEKTON TEKTON вне форума
Новичок
 
Регистрация: 14.03.2011
Сообщения: 60
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
С реестром ничего подобного не делал, надо копаться что есть...

Вот тут, https://regedit.readthedocs.io/reg-cmd.html идёт работа с Cmd, но наверно можно прикрутить эти комманды и к delphi.

В частности комманды REG SAVE и REG RESTORE.

Вообще есть задумка написать типо скриптового движка.
например есть консолька и скрипт:

Код:
Копируем файл1
копируем файл2
копируем файл3
копируем файл
...

Добавляем ключ1 в реестр
Добавляем ключ2 в реестр
Добавляем ключ3 в реестр
...

Запускаем exe

ждём, пока он не закроется,

Сохраняем ключ1 из реестра
Сохраняем ключ2 из реестра
Сохраняем ключ3 из реестра
....
Может кто делал такое?
Как сделать, что б комманды из скрипта работали последовательно?
Ну то есть пока первая не отработает, все остальные "в очереди" стоят.
Ответить с цитированием
  #8  
Старый 16.10.2018, 08:23
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну так и делать.
Распарсить скрипт и выполнять по команде за раз по очереди.
Там, собственно, единственное место - запуск и ожидание процесса. Если процесс стандартный, то тоже без проблем, просто через CreateProcess надо делать, что бы его хэндл получить, ну и ждать пока этот хэндл существует.
Ответить с цитированием
  #9  
Старый 16.10.2018, 10:45
TEKTON TEKTON вне форума
Новичок
 
Регистрация: 14.03.2011
Сообщения: 60
Репутация: 10
По умолчанию

А что лучше, использовать команды Cmd или дельфяные ?
Просто Cmd шные мне больше знакомы, да и в определённых моментах они более эффективные и простые
Ответить с цитированием
  #10  
Старый 16.10.2018, 19:52
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

KISS.
Если тебя устраивает cmd, то нефиг строить монстра. Это если вокруг этого скрипта надо еще кучу всего наделать, тогда имеет смысл что-то мастерить на Дельфи, а если только то, что ты указал в своем превдо-скрипте, то cmd или bash для этого вполне достаточно.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:37.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter