Как загрузить среду выполнения AIR как разделяемую библиотеку в процессе из программы на C - PullRequest
5 голосов
/ 01 февраля 2009

Я бы хотел создать специальную программу запуска AIR на языке C по образцу java.exe.

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

Ну, я хочу сделать AIR Launcher, который вместо этого похож на java.exe.

java.exe запускается как процесс ОС платформы, который связывается со средой выполнения JVM Java (JRE) как разделяемая библиотека в процессе. Java-приложение, которое должно быть выполнено, указывается в качестве аргумента командной строки для java.exe. После запуска java.exe и полной функциональности JVM указанный класс приложения java загружается загрузчиком классов JVM для выполнения. Это указанное Java-приложение затем берет на себя управление, в некотором смысле «захватывая» процесс java.exe. Конечно, указанное приложение java отображается в любом списке процессов как программа java.exe, в которой оно размещено.

Я хочу, чтобы запуск приложения AIR работал следующим образом. Зачем? Поэтому я могу исследовать способы взлома AIR и, возможно, преодолеть некоторые из его многочисленных недостатков. Например, для начала я хочу расширить среду выполнения AIR с помощью некоторых новых API, которые становятся доступными для работающего приложения AIR.

Мой первый заказ будет:

  • Реализовать обязательный интерфейс ActionScript3 в C, который сопоставим в .NET PInvoke
  • Добавить API для запуска процесса, который сопоставимо с API, найденными в Java SE для этого (Runtime.exec, ProcessBuilder, Process)
  • Добавить поддержку приложения AIR в быть в состоянии взаимодействовать с STDIN, стандартный вывод, стандартный вывод Странно, хотя Adobe добавила поддержку локального файла доступ в AIR они пропустили взаимодействие с этим стандартным файлом трубы (пока они есть на любом Платформа ОС, поддерживаемая AIR).
  • Реализовать поддержку AMF через стандартный ввод, stdout, stderr - так AIR (или Java или любые приложения с поддержкой AMF) межпроцессное взаимодействие через обмен объектами AMF. Это добавило бы прикосновение Microsoft PowerShell в воздух.

В настоящее время Merapi предоставляет мост AMF с Java, что демонстрирует эффективность этого. Увы, Merapi должен использовать локальный порт и сокет для межпроцессного взаимодействия - это неуклюжий способ вместо использования межпроцессных каналов stdin / stdout / stderr.

Ответы [ 2 ]

2 голосов
/ 07 февраля 2009

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

Из Часто задаваемых вопросов по распространению среды выполнения Adobe® AIR ™ :

Распространение или использование Adobe AIR время выполнения, установочные файлы или извлеченные установочные файлы в недокументированном виде способ или цель. Например, вы не может распространять, позвонить напрямую, или написать обертки для любого из Adobe Библиотеки AIR или компоненты среды выполнения в вашем программном приложении . Runtime.dll, исполняемые файлы времени выполнения, template.exe и template.app являются примеры компонентов времени выполнения.

2 голосов
/ 07 февраля 2009

Звучит так, будто вы хотите сделать очень хардкорный взлом AIR. Я не думаю, что размещение среды выполнения AIR в вашем собственном процессе будет очень простым. Но вы можете рассмотреть возможность встраивания элемента управления ActiveX для Flash Player. Поскольку это всего лишь COM-объект, любое COM-приложение может CoCreateInstance () Flash Player. Интерфейс COM плохо документирован, но вот несколько примеров, которые могут быть полезны:

  • F-IN-BOX - библиотека разработчика для расширения возможностей Macromedia Flash Player ActiveX. Он не использует свой собственный движок для отображения фильмов, а вместо этого предоставляет оболочку вокруг официального кода swflash.ocx / flash.ocx.
  • Как встроить Flash Player ActiveX с помощью BoxedApp SDK

Если вы хотите получить доступ еще более низкого уровня, вы можете встроить открытый код Tarmain AS3 VM . В коде есть пример оболочки командной строки под названием «avmshell». Если вы собираете виртуальную машину Tamarin самостоятельно, вы можете добавить новые классы ActionScript, реализованные на собственном C ++. Tamarin (и Flash Player) реализуют многие свои функции, используя этот «AVM Glue» между AS и C ++.

...