Помогите извлечь файлы из реестра с#

320
14 мая 2017, 21:28

http://www.cyberforum.ru/windows-forms/thread1980085.html#taglist НЕ могу извлечь файлы из HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\ выводит файл но в папке Run его нет

Подробное условие: Нужно извлечь файлы автозагрузки отсюда HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\ но вместо видимых мною файлов выводит не эти файлы а какой-то другой, не пойму откуда, в диспетчере задаx -> этот файл есть как и те что в не отображаются в моей программе из папки Run вот файл

вот реестр

    RegistryKey current_user,local_machine;
    public Form1()
    {
        InitializeComponent();
        current_user = Registry.CurrentUser.CreateSubKey(
          "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\");
        foreach (string valueName in current_user.GetValueNames())
        {
            listBox1.Items.Add(valueName);
        }
        local_machine = Registry.LocalMachine.OpenSubKey(
          "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\",true);
        foreach (string valueName in local_machine.GetValueNames())
        {
            listBox1.Items.Add(valueName);
        }
    }

    private void button_add_Click(object sender, EventArgs e)
    {
        OpenFileDialog OPF = new OpenFileDialog();
        OPF.Multiselect = true;
        OPF.ShowDialog();
        if (OPF.ShowDialog() == DialogResult.OK)
        {
            foreach (string file in OPF.FileNames)
            {
                MessageBox.Show(file);
                MessageBox.Show(Path.GetFileNameWithoutExtension(OPF.FileName));
            }
        }
        string file_name = Path.GetFileNameWithoutExtension(OPF.FileName);
        string file_path = OPF.FileName;
        current_user.SetValue(file_name, file_path);
        // current_user.Close();
        listBox1.Items.Insert(1,file_name);
    }
    private void button_delete_Click(object sender, EventArgs e)
    {
        string file_name = listBox1.SelectedItem.ToString();
        current_user.DeleteValue(file_name, false);
        // current_user.Close();
        listBox1.Items.Remove(file_name);
    }
}

как видите эти фалйы видно а из LOCAL_MACHINE не могу вывести

в диспечтере все есть

Answer 1

Реестр

  1. Если какая-то программа использует настройки реестра, то информация может (но не обязана) быть в реестре.

  2. Если в реестре (любой ветке) есть запись о программе, это не означает, что программа существует и корректно установлена на компьютере.

  3. Реестр можно использовать как доверенный справочник по системным настройкам, т.к. это отслеживает сама система, но информацию о программах, которые не являются частью Windows нужно проверять, она вполне может быть неактуальной.

  4. В реестре бывают ошибки, которые не мешают явно работе системы, но могут приводить к ошибкам в различных сторонних программах, если они используют значения реестра без проверки их актуальности и корректности.

  5. Существует 100500 причин по которым в реестре появляются невалидные ключи, от кривого деинсталлятора и/или апдейтера, до багов самой системы.

  6. Некоторые ветви реестра получаются путем объединения пользовательской и системной ветвей, иногда результат объединения может содержать "сюрпризы" разной степени "приятности".

  7. Интересующая вас ветка HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\ содержит только системные записи о запускаемых программах, для текущего активного пользователя нужно искать записи в HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\. Суммарная информация из этих двух веток будет соответствовать полному списку автозапуска для текущего активного пользователя.

Диспетчер задач

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

  2. Диспетчер задач показывает не всегда все, что реально запущено, от него вполне можно скрыть отдельные процессы, но все что отображает диспетчер реально запущено в момент просмотра.

  3. В штатном диспетчере можно включить отображение реальных путей к исполняемым файлам для видимых процессов, но это нужно делать специально, по-умолчанию эта опция отключена. Не знаю какая версия Windows у вас используется, но искать нужно настройки отображаемых столбцов (ориентировочно в меню "Вид" => "Выбрать столбцы"), вам нужен столбец "Путь к образу".

Планировщик задач Windows

Некоторые программы используют для автозапуска системный планировщик задач (апдейтер хрома например), их, разумеется, нет в этих ветках реестра, хотя есть подозрение, что сами задачи все таки хранятся в реестре, но где именно я не знаю, не копал.

Папка "Автозагрузка" (StartUp)

Есть специальные папки: общая и индивидуальные для каждого пользователя

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
C:\Users\UserName\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

(пути к данным папкам могут отличаться, в зависимости от локальных настроек системы и профиля пользователя)

В этих папках могут быть ярлыки для автоматического запуска программ, при входе пользователя в систему.

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

Если остались вопросы - оставьте комментарий или внесите уточнение в вопрос.

READ ALSO
Отправка сообщения через VK API при запуске

Отправка сообщения через VK API при запуске

C# практически не знаю, но встала задача реализовать приложениеСуть его в том, чтобы при запуске приложения(только один раз при запуске), через...

504
Не даёт открыть файл через OpenFileDialog

Не даёт открыть файл через OpenFileDialog

На форме есть кнопка и она должна открывать текстовые файлы с помощью OpenFileDialog(то есть текствые файлы разбросаны по компьютеру или же нужно...

370
Отображение изображения из файла в PictureBox

Отображение изображения из файла в PictureBox

В ListBox добавляется музыкаНужно чтобы когда пользователь выберет/выделит музыку в ListBox и после нажмет на Button, то в PictureBox должна отобразится...

302
Вызов функции GetSystemInfo через p/invoke возвращает неверный результат

Вызов функции GetSystemInfo через p/invoke возвращает неверный результат

ЗдравствуйтеВызывая функцию GetSystemInfo из kernel32 через p/invoke

252