Domanda

Vorrei creare uno speciale programma di avvio AIR in C lungo le linee di java.exe.

Ho esaminato l'esecuzione dei programmi AIR con un visualizzatore di processi ed è stato in grado di individuare la DLL di runtime AIR in uso. I programmi AIR sono diversi da Java in quanto vengono installati come eseguibili specifici della piattaforma che associano il runtime AIR come libreria condivisa in-process una volta avviato (la loro icona viene cliccata due volte dall'utente).

Bene, voglio creare un launcher AIR che è invece come java.exe.

java.exe viene avviato come processo del sistema operativo della piattaforma che si collega a Java JVM runtime (JRE) come libreria condivisa in-process. L'applicazione java che deve essere eseguita è specificata come argomento della riga di comando su java.exe. Una volta che java.exe è in esecuzione e JVM è completamente funzionale, la classe di applicazione java specificata viene caricata dal programma di caricamento classi JVM per l'esecuzione. Quell'applicazione Java specificata prende quindi il sopravvento, in un certo senso & Quot; dirottamento & Quot; il processo di java.exe. Naturalmente, l'applicazione java specificata viene visualizzata in qualsiasi elenco dei processi come programma java.exe che la ospita.

Voglio far funzionare il lancio dell'app AIR in questo modo. Perché? Quindi posso esplorare modi per hackerare AIR e forse superare alcune delle sue molte, molte carenze. Ad esempio, per cominciare voglio estendere l'esperienza di runtime di AIR con alcune nuove API che diventano disponibili per l'applicazione AIR in esecuzione.

Il mio primo ordine di attività sarebbe:

  • Implementa un'interfaccia di associazione di ActionScript3 a C che è comparabile a .NET PInvoke
  • Aggiungi un'API per l'avvio del processo è paragonabile alle API presenti in Java SE per fare ciò (Runtime.exec, ProcessBuilder, Process)
  • Aggiungi supporto per un'applicazione AIR a essere in grado di interagire con stdin, stdout, stderr. Stranamente, però Adobe ha aggiunto il supporto per il file locale accesso in AIR, hanno omesso interazione con questi file standard pipe (eppure si trovano su qualsiasi Piattaforma del sistema operativo supportata da AIR).
  • Implementa il supporto di AMF su stdin, stdout, stderr - così AIR (o Java o qualsiasi lingua compatibile con AMF) comunicazione tra processi tramite lo scambio di oggetti AMF. Questo aggiungerebbe un tocco di Microsoft PowerShell su AIR.

Attualmente Merapi fornisce un bridge AMF con Java, il che dimostra l'efficacia di questo. Ahimè, Merapi deve usare una porta e un socket localhost per fare la comunicazione tra processi - che è un modo goffo di andare in relazione all'uso delle pipe tra processi stdin / stdout / stderr.

È stato utile?

Soluzione 2

Ciò che la mia domanda posta tentando di fare risulta essere proibito da Adobe (per quanto riguarda qualsiasi potenziale uso commerciale):

Da Adobe & # 174; AIR # 8482 &; Domande frequenti sulla distribuzione runtime :

  

Distribuisci o usa Adobe AIR   runtime, file di installazione o estratti   file di installazione in un documento non documentato   modo o scopo. Per esempio tu   non può distribuire, chiamare direttamente o   scrivere wrapper per qualsiasi Adobe   Librerie AIR o componenti di runtime   all'interno dell'applicazione software .   Runtime.dll, eseguibili runtime,   template.exe e template.app sono   esempi di componenti di runtime.

Altri suggerimenti

Sembra che tu voglia fare un hacking AIR molto hardcore. Non penso che ospitare il runtime AIR nel tuo processo sia molto semplice. Ma potresti prendere in considerazione l'idea di incorporare il controllo ActiveX di Flash Player. Poiché è solo un oggetto COM, qualsiasi applicazione COM può CoCreateInstance () Flash Player. L'interfaccia COM non è ben documentata, ma ecco alcuni esempi che potrebbero essere utili:

Se si desidera ottenere un accesso di livello inferiore, è possibile incorporare l'open-source Tarmain AS3 VM . Il codice ha una shell della riga di comando di esempio chiamata & Quot; avmshell & Quot ;. Se costruisci tu stesso la VM Tamarin, puoi aggiungere nuove classi ActionScript implementate in C ++ nativo. Tamarin (e Flash Player) implementano molte delle loro funzioni usando questo & Quot; AVM Glue & Quot; tra AS e C ++.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top