Запуск и остановка Firefox из C # - PullRequest
5 голосов
/ 26 февраля 2010

Когда я начинаю

/ Приложения / Firefox.app / Содержание / MacOS / firefox-bin

в MacOSX с использованием Process.Start () с использованием Mono, идентификатор возвращаемого процесса не соответствует процессу, в котором работает firefox.

Похоже, Firefox быстро решает запустить другой процесс и завершить текущий.

Это затрудняет остановку firefox и обнаружение его работоспособности. Я попытался запустить firefox с помощью флага -no-remote, но безрезультатно.

Есть ли способ запустить firefox таким образом, чтобы он не делал танец "Я быстро сделаю для тебя новый процесс"?

Ситуацию можно в некоторой степени обнаружить, убедившись, что Firefox продолжает работать не менее 3 секунд после его запуска, а если нет, сканирует другие процессы firefox. Однако этот метод в лучшем случае шаток, поскольку в медленные дни это может занять чуть более 3 секунд, а затем все тесты, в зависимости от этого поведения, завершаются неудачей.

Оказывается, это происходит только при запросе Firefox запустить определенный профиль с помощью -P MyProfile. (Что мне нужно сделать, так как мне нужно запустить firefox с определенными настройками прокси-сервера). Если я запускаю firefox "нормально", он действительно придерживается своего процесса.

Ответы [ 4 ]

3 голосов
/ 18 мая 2010

При использовании mozilla программно / встраивания в другие приложения вы должны использовать предоставленные компоненты:

«Правильный путь» в соответствии с рекомендациями Mozilla ...

https://developer.mozilla.org/en/XPCOM

"Легкий путь", общее мнение парней из Mozilla dev ...

http://www.iol.ie/~locka/mozilla/control.htm

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

Однако ...

Если вы действительно настаиваете на том, чтобы следить за фактическим процессом для экземпляра Firefox, вы можете позвонить

Process.Start ( "... \ firefox.exe");

Тогда попробуйте это (я думаю, что это работает и на MAC OS) ...

C # / mono: получить список дочерних процессов в Windows и Linux

Основная идея / шаблон мысли заключается в том, что, если он фактически выполняет другой процесс сразу, вы сможете найти его как «дочерний» процесс, а не просто как один из списка в «списке задач». / менеджер процессов для машины.

0 голосов
/ 19 мая 2010

У меня нет Mac, поэтому я не уверен, но если это что-то вроде Linux, то «бинарный» файл firefox на самом деле является сценарием оболочки, который устанавливает набор необходимых переменных среды и проверяет, установлен ли уже firefox работает (если это так, он попытается добавить новую вкладку в существующий экземпляр, насколько я знаю).

Возможно, вы сможете перехватить новый PID внутри скрипта, хотя, если вы обновите его, остерегайтесь его перезаписи во время обновлений.

0 голосов
/ 18 мая 2010

Я предлагаю использовать другой подход: перечислить все запущенные процессы, найти Firefox, получить идентификатор процесса и (необязательно) посмотреть, запущен ли он.

Я не уверен, есть ли независимый от платформы способ сделать это. В Linux вы можете вызвать «ps -ef» для их перечисления, в Windows это называется «список задач».

0 голосов
/ 18 мая 2010

Если вы в порядке с обнаружением самого процесса Firefox, но не знаете, когда вам следует начать обнаружение, вы можете использовать событие Process.Exited . Не забудьте сначала установить EnableRaisingEvents .

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