Как определить, что процесс запущен с использованием кода C # [служба Windows] - PullRequest
0 голосов
/ 18 марта 2010

Я пытаюсь создать Windows-сервис, который отслеживает процесс, а именно «Gtalk», если процесс запущен, браузер Internet Explorer (процесс iexplore) должен быть закрыт. Это должно происходить только при запуске процесса «Gtalk», [не при запуске]

Код, который я написал и реализовал, не позволяет открывать IExplore во время работы Gtalk. Это, конечно, то, что я не пытаюсь. Процесс Gtalk должен закрывать браузер только при его запуске. После запуска процесса он должен разрешить открывать IExplore.

Возможно ли это с помощью службы Windows или это должно быть частью самого процесса Gtalk?

Это мой код:

 while (true)
          {

                if (Process.GetProcessesByName("Gtalk").Length > 0)
                {

                    foreach (Process prc in Process.GetProcessesByName("IExplore"))
                    {
                        prc.Kill();
                    }
                }
           }

Ответы [ 2 ]

3 голосов
/ 18 марта 2010

Не вдаваясь в «Почему?» из всего этого стремления получить то, что, как вам кажется, нужно, вы должны вести список «известных» процессов.

Например, сохраните список идентификаторов процессов, которые вы видели для процессов, которые имеют GTalk в качестве имени процесса. Тогда, только если вы видите процесс с именем GTalk, у которого еще нет идентификационного номера процесса, вы добавляете его в свой список и выполняете действие IExplore kill.

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

1 голос
/ 18 марта 2010

Из того, что вы говорите (возможно, я неправильно прочитал), только при запуске GTalk это должно убить IE, после этого IE может быть запущен. Может ли быть запущено несколько экземпляров GTalk?

Вы управляете кодом GTalk? Похоже, это лучше всего реализовать в процедуре запуска GTalk.

Если нет, то @ peSHIr лучше всего подойдет для проверки того, обнаружен ли процесс GTalk.

Однако, даже если можно запустить только один экземпляр GTalk, вам нужно будет вырваться из кода, который IE убивает при первом запуске (возможно, хранит идентификатор процесса GTalk), а затем периодически проверять (возможно, используя таймер) процесс GTalk запущен, и если нет (или если он есть, но с другим идентификатором процесса), вы снова запустите код уничтожения IE

Редактировать: простой пример использования таймера

Обратите внимание, что этот объект таймера является одноразовым, Вот быстрый пример;

//in startup code...
timer = new System.Threading.Timer(CheckProcessAndKillIeIfNeedBe, null, 0L, (long)TimeSpan.FromMinutes(1).TotalMilliseconds);

//some method elsewhere
public void CheckProccessAndKillIeIfNeedBe(object state)
{
  //do the process check and kill IE if conditions are met          
}

null = состояние, 0L означает выполнение сейчас, а последний параметр - ваш интервал в миллисекундах для частоты, с которой это должно выполняться

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...