Использование Win32 API CreateProcess в FireBreath Framework - PullRequest
0 голосов
/ 08 февраля 2012

Я пытаюсь разработать плагин для браузера, используя фреймворк Firebreath. Первое, чего я хотел бы добиться - это сделать плагин способным выполнять трассировку. Сейчас я делаю это на Windows7. В настоящее время я решил использовать Win32API CreateProcess для вызова командной оболочки. Установив dwFlags = STARTF_USESHOWWINDOW, я могу скрыть окно командной оболочки во время выполнения.

ПРОБЛЕМА: createProcess реализован в методе run (), где я вызвал его с помощью JS для тестирования. Когда я вызвал plugin (). Run (), traceroute работает хорошо, и вывод был успешно записан в текстовый файл, как я хотел. Однако во время выполнения браузер перестает отвечать на запросы, и, наконец, плагин падает через несколько секунд после завершения трассировки. Поскольку я новичок в разработке плагинов и немного разбираюсь в c ++, мне интересно, почему возникла эта проблема. К вашему сведению, если я не скрывал окно командной оболочки, плагин работал удивительно - браузер реагировал на выполнение трассировки.

1 Ответ

1 голос
/ 09 февраля 2012

Очень важно, чтобы в любом плагине NPAPI (с FireBreath или иным образом) вы не блокировали основной (javascript) поток. То, что вы пытаетесь сделать, может быть сделано несколькими способами; Я бы, вероятно, передал бы обратный вызов, запустил новый поток, выполнил бы там процесс создания, а затем запустил бы обратный вызов js, когда он завершится с результатом.

См. Советы FireBreath: асинхронные вызовы JavaScript .

Единственное, на что нужно обратить внимание, это то, что вы должны иметь возможность завершить поток (и процесс), если плагин закрывается во время вызова.

...