Как я могу загрузить среду выполнения AIR в качестве разделяемой библиотеки в процессе из программы на языке Си

StackOverflow https://stackoverflow.com/questions/499615

Вопрос

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

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

Ну, я хочу сделать воздушную пусковую установку, которая вместо этого похожа на java.exe.

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

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

Моим первым делом было бы:

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

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

Это было полезно?

Решение 2

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

Из Часто задаваемые вопросы о распространении Adobe® AIR™ Runtime Distribution:

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top