Закрыть конкретное окно IE с помощью С#, используя Kill, не работает

Я пытаюсь закрыть самое последнее окно/вкладку IE, но когда я вызываю метод Kill, окно перезапускается без содержимого страницы. Это код, который я использую для получения самого последнего процесса IE:

var a = System.Diagnostics.Process.GetProcessesByName("iexplore");
DateTime earliestStart = DateTime.Today.Subtract(new TimeSpan(1,0,0,0));
System.Diagnostics.Process youngestProccess = a.FirstOrDefault();


                foreach(var b in a){
                    if (b.StartTime > earliestStart)
                    {
                        earliestStart = b.StartTime;
                        youngestProccess = b;
                    }
                }                
                youngestProccess.Kill();

Код работает таким образом, что самое последнее окно «перестает» работать, но окно не закрывается.

Есть идеи?


person Yoiku    schedule 22.08.2017    source источник
comment
Вы хотите специально закрыть окно, закрыть вкладку или закрыть что-либо в зависимости от того, какой самый новый порожденный процесс IE?   -  person ravibhagw    schedule 22.08.2017
comment
он закрыл вкладку, но IE снова открыл ее, когда я это сделал   -  person BugFinder    schedule 22.08.2017
comment
и stackoverflow.com/questions/31098717/ может закрыть их все, поэтому он делает то, что должен   -  person BugFinder    schedule 22.08.2017
comment
Это продукт, который я тестирую. Дело в том, что иногда самое последнее окно открывается как вкладка (не знаю почему, так как я следую тому же шагу). Но, по крайней мере, в диспетчере задач вкладка или окно IE открыты как отдельные процессы. Поэтому я просто хочу закрыть последний открытый процесс IE, а не все окна   -  person Yoiku    schedule 22.08.2017
comment
@Yoiku Интересно. Подумайте, хотите ли вы принудительно закрыть вкладку/окно или отправить запрос в приложение, чтобы закрыть вкладку/окно. Что произойдет, если страница, открытая в IE, вызовет событие beforeunload? Я думаю, что IE пытается автоматически восстановить последний сеанс, когда процесс принудительно закрывается. Конечно, есть способ подключиться к IE и программно запросить закрытие.   -  person ravibhagw    schedule 22.08.2017
comment
Я только что попытался выполнить process.CloseMainWindow(); процесс.WaitForExit(60000); И это не сработало.   -  person Yoiku    schedule 22.08.2017
comment
Я только что понял, что такое поведение повторного открытия окна происходит только в процессе iexplore.exe * 32 и даже вручную.   -  person Yoiku    schedule 22.08.2017


Ответы (1)


Привет, я только узнаю, как решить проблему.

Сообщение выдается, потому что в моем IE установлен флажок «Включить автоматическое восстановление после сбоя» на вкладке «Дополнительные параметры Интернета».

Так что, если вы столкнулись с этим, у вас есть 2 варианта: снять этот флажок навсегда (что может сработать в вашем случае) или, как в моем случае, вы можете изменить выбор с помощью ключей реестра, а когда вы закончите тестирование, верните значение, чтобы оно было включено.

Поэтому для этого вам нужно добавить это в свой код перед открытием IE.

Registry.SetValue("HKEY_CURRENT_USER\\Software\\Microsoft\\Internet Explorer\\Recovery", "AutoRecover", 2);  

Чтобы снова включить опцию, вы должны сделать то же самое, но с 0

Registry.SetValue("HKEY_CURRENT_USER\\Software\\Microsoft\\Internet Explorer\\Recovery", "AutoRecover", 0);  
person Yoiku    schedule 23.08.2017