Comment puis-je charger le moteur d'exécution AIR en tant que bibliothèque partagée in-process à partir d'un programme C

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

Question

J'aimerais créer un programme spécial de lanceur AIR en C, dans le style de java.exe.

J'ai examiné l'exécution de programmes AIR avec un visualiseur de processus et j'ai pu localiser la DLL d'exécution AIR utilisée. Les programmes AIR sont différents de Java en ce qu’ils sont installés en tant qu’exécutables spécifiques à la plate-forme qui lient son environnement d’exécution en tant que bibliothèque partagée in-process une fois lancés (leur icône est double-cliquée par l’utilisateur).

Eh bien, je veux créer un programme de lancement AIR qui ressemble à java.exe.

Le fichier java.exe est lancé en tant que processus de système d'exploitation de plate-forme qui se connecte à l'environnement d'exécution JRE Java (JRE) en tant que bibliothèque partagée in-process. L'application Java à exécuter est spécifiée en tant qu'argument de ligne de commande pour java.exe. Une fois que java.exe est en cours d’exécution et que la machine virtuelle Java est entièrement fonctionnelle, la classe d’application Java spécifiée est chargée par le chargeur de classes de la machine virtuelle Java pour exécution. Cette application Java spécifiée prend alors le relais, dans un sens & "; Détournement &"; le processus de java.exe. Bien entendu, l’application Java spécifiée apparaît dans n’importe quel processus énumérant le programme java.exe qui l’héberge.

Je souhaite que le lancement d'applications AIR fonctionne comme ceci. Pourquoi? Je peux donc explorer des moyens de pirater AIR et peut-être de surmonter certaines de ses nombreuses lacunes. Par exemple, pour les débutants, je souhaite étendre l'expérience d'exécution AIR à l'aide de nouvelles API devenues disponibles pour l'application AIR en cours d'exécution.

Mon premier objectif est de:

  • Implémentez une interface de liaison de ActionScript3 à C comparable sur .NET PInvoke
  • Ajouter une API pour le lancement du processus est comparable aux API présentes dans Java SE pour cela (Runtime.exec, ProcessBuilder, Process)
  • Ajout du support pour une application AIR à être capable d'interagir avec stdin, stdout, stderr. Étrangement, cependant Adobe a ajouté le support pour le fichier local accès dans AIR, ils ont omis interaction avec ces fichiers standard tuyaux (mais ils se trouvent sur tout Système d'exploitation pris en charge par AIR).
  • Implémenter le support de l'AMF sur stdin, stdout, stderr - donc AIR (ou Java ou toute langue compatible AMF) les applications peuvent communication interprocessus via échange d'objets AMF. Cela ajouterait une touche de Microsoft PowerShell AIR.

Actuellement, Merapi fournit un pont AMF avec Java, ce qui démontre son efficacité. Hélas, Merapi doit utiliser un port localhost et un socket pour effectuer la communication interprocessus, ce qui est une façon maladroite de se comporter par rapport à l’utilisation des tubes interprétés stdin / stdout / stderr.

Était-ce utile?

La solution 2

Ce que ma question a tenté de faire s’avère être interdit par Adobe (pour toute utilisation commerciale potentielle):

Extrait du Adobe & # 174; AIR & # 8482; FAQ sur la distribution d'exécution :

  

Distribuez ou utilisez Adobe AIR   runtime, fichiers d'installation ou extraits   fichiers d'installation dans un non documenté   manière ou but. Par exemple, vous   ne peut pas distribuer, appeler directement, ou   écrire des enveloppes pour l'un des Adobe   Bibliothèques AIR ou composants d'exécution   dans votre application logicielle .   Runtime.dll, exécutables exécutables,   template.exe et template.app sont   exemples de composants d'exécution.

Autres conseils

On dirait que vous voulez faire du piratage très hardcore d’AIR. Je ne pense pas que l'hébergement du moteur d'exécution AIR dans votre propre processus sera très facile. Mais vous pouvez envisager d'intégrer le contrôle ActiveX de Flash Player. Puisqu'il ne s'agit que d'un objet COM, toute application COM peut CoCreateInstance () avec Flash Player. L’interface COM n’est pas bien documentée, mais voici quelques exemples qui pourraient être utiles:

Si vous souhaitez obtenir un accès encore plus bas, vous pouvez intégrer le VM Open Source. . Le code a un exemple d'interpréteur de commandes en ligne de commande appelé & "; Avmshell &"; Si vous construisez vous-même la machine virtuelle Tamarin, vous pouvez ajouter de nouvelles classes ActionScript implémentées en C ++ natif. Tamarin (et Flash Player) implémentent bon nombre de leurs fonctionnalités à l'aide de cette & "; Colle AVM &"; entre AS et C ++.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top