#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, поэтому, если бы это был я, я бы установил его как сервис.