Мониторинг изменений в реестре

286
12 февраля 2017, 09:23

Не выводит запись об изменения в реестре ( вывод в консоль ) По этой статье + примере на программе: RegistryMonitor

Сделал следующие разделы:

static List<string> RegScan = new List<string>()
        {
            @"HKEY_CLASSES_ROOT\exefile\shell\runas\command",
            @"HKEY_CLASSES_ROOT\zapfile\shell\open\command",
            @"HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.exe",
            @"HKEY_CLASSES_ROOT\.exe",
        };

Далее по этой библиотеки RegistryUtils.dll

Сделал массив RegistryMonitor

private static RegistryMonitor[] registryMonitors;
public static void StopRegistryMonitor()
{
    if (registryMonitors != null)
    {
        for (int i=0; i<registryMonitors.Length; i++)
        {
            registryMonitors[i].RegChanged -= OnRegistryChanged;
            registryMonitors[i].Dispose();
        }
        registryMonitors = null;
        Console.WriteLine("Monitoring stopped");
    }
}
public static void StartRegistryMonitor()
{
    if (registryMonitors != null) return;
    registryMonitors = new RegistryMonitor[RegScan.Count];
    for (int i = 0; i < RegScan.Count; i++)
    {
        Console.WriteLine("Monitoring \"" + RegScan[i] + "\" started");
        registryMonitors[i] = new RegistryMonitor(RegScan[i]);
        registryMonitors[i].RegChanged += OnRegistryChanged;
    }
}
static void OnRegistryChanged(object sender, EventArgs args)
{
   Console.WriteLine("registry key has changed");
}

Запускаю:

 Thread s = new Thread(StartRegistryMonitor);
        s.Start();

Но при добавление в реестре по нужным веткам(массива) ключа или раздела, не оповещает в консоли :(.

Answer 1

Всё верно, просто автор данной статьи написал:

RegistryMonitor has two public methods which are declared as follows:

public void Start();
public void Stop();

I don't think that these methods require much explanation. The former creates a separate thread, which will monitor the registry, and the latter will stop that thread.

Это означает что создать инстанс RegistryMonitor и подписаться на событие ещё не означает что монитор будет запущен/работать. Соответственно вот так запускаем:

public static void StartRegistryMonitor()
{
  if (registryMonitors != null) return;
  registryMonitors = new RegistryMonitor[RegScan.Count];
  for (int i = 0; i < RegScan.Count; i++)
  {
    Console.WriteLine("Monitoring \"" + RegScan[i] + "\" started");
    registryMonitors[i] = new RegistryMonitor(RegScan[i]);
    registryMonitors[i].RegChanged += OnRegistryChanged;
    registryMonitors[i].Start(); // Старт мониторинга тут.
  }
}
READ ALSO
Подтверждение data-confirm вызывается 2 раза

Подтверждение data-confirm вызывается 2 раза

Перед сохранением хотел сделать подтверждение, прописал data-confirm и теперь окно вызывается 2 раза перед отправкой формы

355
Объединить три масива в один

Объединить три масива в один

Пытаюсь объединить массивы в один, для обеднения взял функцию array_merge у меня получился массив:

414
basic аутентификация для одной папки

basic аутентификация для одной папки

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

375
Ошибка при установке laravel

Ошибка при установке laravel

При установке Laravel я получаю "oops< something went wrong" и следтекст ошибки

454