2016-10-18 2 views
1

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

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 отключает запуск программы, он не удаляет его ключ в разделе реестра, но он меняет другое значение. Но я не смог узнайте, что изменилось.

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

Спасибо.

+0

Вы ищете в 'HKEY_CURRENT_USER' или 'HKEY_LOCAL_MACHINE'? –

ответ

0

Поскольку установка его выключенным на Урочном не удаляет его запись в

CurrentUser\SOFTWARE\Microsoft\Windows\CurrentVersion\Run а установка соответствующего значения в CurrentUser\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run от 0200 0000000... до 0300 0000 xxxxx....

+0

потрясающий! вы просто пропустили то, что он исследовал/StartUpApproved. :) – Slashy

0

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

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 
    HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce 
    HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run 
    HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run32 
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce 
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run 
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run32 

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

  • "02 00 00 00 ..." -> включен
  • любой другой -> отключен
+0

, когда я устанавливаю новый ключ, он также выполняется программно, используя метод SetValue() ', и я делаю это в реестре' HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run' ... поэтому вот где я проверяю получение значения .. @AlinG Почему мне нужно проверять другие пути реестра? – Slashy

+0

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

Смежные вопросы