2015-08-22 2 views
3

я написал эту маленькую функцию, которая ищет процесс по имени и убивает его: см ниже кодПочему explorer.exe автоматически перезапускается, когда я обрабатываю user.Kill() C#?

Process[] procList = Process.GetProcesses(); 
RegistryKey expKey = Registry.LocalMachine; 
expKey = expKey.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", true); 
expKey.SetValue("AutoRestartShell", 0); 

     using (StreamWriter writer = new StreamWriter(@"C:\test\progtemp\Procs1.Txt", true)) 

     { 

      int i = 0; 

      foreach (Process procs in procList) 

      { 

       writer.WriteLine(string.Format("Process Name {0} -- Process ID {1} -- Session ID {2}", procs.ProcessName, procs.Id, procs.SessionId)); 

       if (procs.ProcessName == "explorer") 

       { 

        procList[i].Kill(); 

       } 

       i++; 

      } 

     } 
expKey.SetValue("AutoRestartShell", 1); 

Мне интересно, почему, когда я говорю это, чтобы убить исследователь автоматически перезагружается. Как я могу сделать это так, чтобы он не перезапускался, и вам нужно войти в диспетчер задач и вручную перезапустить его?

+0

Explorer.exe является то, что используется для обеспечения оболочки Windows. Microsoft приняла решение о том, что если он разбился, имеет смысл попытаться его перезапустить. –

ответ

5

Если вы запустите regedit и зайдите в HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Winlogon, вы можете найти там ключ с именем AutoRestartShell.

Настройки, равные 0, будут отключать explorer.exe от перезагрузки. Хотя я лично говорю, что это не лучшая идея, чтобы общаться с реестром только для этого, но если вам действительно нужно, используйте Registry.SetValue, чтобы изменить это значение на 0 из кода (документация: https://msdn.microsoft.com/en-us/library/5a5t63w8(v=vs.110).aspx)

Редактировать: вдохновение взяты из https://technet.microsoft.com/en-us/library/cc939703.aspx

Edit 2: рытье немного в Google придумал следующий результат, который объясняет все немного лучше: https://superuser.com/questions/511914/why-does-explorer-restart-automatically-when-i-kill-it-with-process-kill

+0

После реализации вышеприведенного кода и запуска приложения в качестве администратора и установки подкаталога write в true он по-прежнему вызывает исключение. Есть идеи? – user3038431

+0

Какое исключение? – Propolys

+0

То же самое исключение безопасности, которое я получал, прежде чем сообщить мне, что у меня нет прав на редактирование реестра – user3038431

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