c # проверьте, запускается ли программа при запуске

#c# #windows #registry

#c# #Windows #реестр

Вопрос:

Я хотел бы проверить, запускается ли определенная программа при запуске компьютера, для этого я обратился к win32 RegistryKey классу:

  private void Form1_Load(object sender, EventArgs e)
    {
        bool ok = isOnRegistryStartup("iFilter");
        MessageBox.Show(ok.ToString());
    }
    private bool  isOnRegistryStartup(string key)
    {
       RegistryKey RegistryKey = Registry.CurrentUser.OpenSubKey
                ("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true);
        if (registryKey.GetValue(key)!=null)
        {
            return true;

        }
        return false;

    }
  

Результат был True действительно, потому что программа действительно запускается при запуске Windows, но когда я отключил запуск этой программы с помощью Task manager (и ее статус стал disabled ), при следующем запуске кода выше результат был по-прежнему True , хотя эта программа больше не является частью программ запуска.

Это приводит меня к простому выводу, что когда диспетчер задач Windows отключает программу запуска, он не удаляет ее ключ в разделе реестра, но изменяет другое его значение. но я не смог выяснить, что это за измененное значение.

Я надеюсь, что кто-нибудь может помочь.

Спасибо.

Комментарии:

1. Вы смотрите в HKEY_CURRENT_USER или HKEY_LOCAL_MACHINE ?

Ответ №1:

Поскольку установка ее отключенной в taskmgr не удаляет ее запись в

CurrentUserSOFTWAREMicrosoftWindowsCurrentVersionRun но вместо этого установите соответствующее значение в CurrentUserSOFTWAREMicrosoftWindowsCurrentVersionExplorerStartupApprovedRun от 0200 0000000... до 0300 0000 xxxxx....

Комментарии:

1. потрясающе! вы только что пропустили что-то, что одобрено Explorer / STARTUPAPAP. 🙂

Ответ №2:

Просто немного расширяя то, что сказал Роберт, вы должны проверить следующие реестры:

     HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersionRun
    HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersionRunOnce
    HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersionExplorerStartupApprovedRun
    HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersionExplorerStartupApprovedRun32
    HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun
    HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRunOnce
    HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionExplorerStartupApprovedRun
    HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionExplorerStartupApprovedRun32
  

Для реестров Run и Run32 правило, кажется:

  • «02 00 00 00 …» -> включено
  • любое другое -> отключено

Комментарии:

1. когда я устанавливаю новый ключ, это также выполняется программно, используя SetValue() метод, и я делаю это в HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersionRun реестре … так что именно там я проверяю получение значения.. @AlinG почему мне нужно проверять другие пути реестра?

2. Вы не упомянули об этом, поэтому я не знал, несете ли вы также ответственность за установку программы в качестве запуска. Тем не менее, я бы сделал это на всякий случай. Если у вас есть контроль как над установкой, так и над удалением, тогда все в порядке, если вы просто удалите ключ, с которого вы добавили. Этот механизм довольно недокументирован и может не работать в старых или будущих версиях Windows, поэтому, если бы это был я, я бы установил его как сервис.