c # закрыть, т.е. вкладку, основанную на знании идентификатора процесса - PullRequest
0 голосов
/ 13 сентября 2018

, поэтому добавление улучшений в существующий код. Прямо сейчас открываются окна IE для навигации по определенным сайтам

            startInfo.CreateNoWindow = false;
        startInfo.UseShellExecute = false;
        startInfo.FileName = Configuration.IExplorerLocation();
        startInfo.WindowStyle = ProcessWindowStyle.Hidden;
        startInfo.Arguments = url;

        // Start the process with the info we specified.

        Process exeProcess = Process.Start(startInfo);

так что теперь клиент хочет, чтобы мы закрыли это окно, если они попытаются нажать на ту же кнопку навигации в пользовательском интерфейсе. Поэтому мне нужно что-то подержать, чтобы закрыть это позже, если они попытаются снова. Я сохранил ручку, идентификатор процесса и т. Д., Чтобы попытаться закрыть позже, но, похоже, тогда понятия не имею, что окно существует. Я думаю, что часть моей проблемы может заключаться в том, что IE вроде имеет основной PID, и любые новые окна получают новые PID, но я сохраняю PID, который я только что создал, и через 50 мс он не знает, что существует, чтобы закрыть его ... используя этот код

                    log.Info(fn + "parse -" + _iNypIEProcessIdName);
                string[] ProcData = _iNypIEProcessIdName.Split('-');
                int ProcId = 0;
                log.Info(fn + " "+ ProcData[0]);
                Int32.TryParse(ProcData[0], out ProcId);
                //Process exeProcess as new Process;
                Process CheckProcess = null;
                log.Info(fn + "2");
                try
                {
                    CheckProcess = Process.GetProcessById(ProcId);
                }
                catch (Exception e)
                {
                    log.Error(fn + " iNYP process not found to remove ", e);
                }
                if (CheckProcess.ProcessName == ProcData[1])
                {
                    // then I think we have a match ??
                    log.Debug(fn + " Attempting to close ID" + ProcId + " " + ProcData[1]);
                    CheckProcess.Close();
                }

так что не уверен, что мой код неправильный ... но я думаю, что я больше ищу хороший способ открыть процесс ... получить некоторую информацию о нем, которую я позже смогу использовать, чтобы закрыть его, если они попытаются к NAV, чтобы в значительной степени тот же URL. Должен ли я просто перебрать все существующие окна IE и найти тот же URL и закрыть? Я просто подумал, что попытка получить ручку или PID будет чище ... и примечание, когда я пытаюсь получить ручку после запуска процесса, окно не полностью поднято, а ручка - НОЛЬ ... поэтому любые советы приветствуются !! !

...