Как я могу загрузить среду выполнения AIR в качестве разделяемой библиотеки в процессе из программы на языке Си
-
20-08-2019 - |
Вопрос
Я бы хотел создать специальную программу 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 ++.