5

java.exe の行に沿って、C で特別な AIR ランチャー プログラムを作成したいと考えています。

プロセス ビューアーを使用して AIR プログラムの実行を調べたところ、使用されている AIR ランタイム DLL を見つけることができました。AIR プログラムは、起動後に AIR ランタイムをインプロセス共有ライブラリとしてバインドするプラットフォーム固有の実行可能ファイルとしてインストールされるという点で Java とは異なります (ユーザーがアイコンをダブルクリックします)。

さて、代わりに java.exe のような AIR ランチャーを作りたいと思います。

java.exe は、インプロセス共有ライブラリとして Java JVM ランタイム (JRE) にバインドするプラットフォーム OS プロセスとして起動されます。実行する Java アプリケーションは、java.exe のコマンドライン引数として指定されます。java.exe が実行され、JVM が完全に機能するようになると、指定された Java アプリケーション クラスが実行のために JVM クラス ローダーによってロードされます。その指定された Java アプリケーションは、ある意味で java.exe のプロセスを「ハイジャック」します。もちろん、指定された Java アプリケーションは、それをホストする java.exe プログラムとしてすべてのプロセス リストに表示されます。

AIR アプリの起動をこのように動作させたいと考えています。なんで?そのため、AIR をハッキングする方法を探り、多くの欠点を克服することができます。たとえば、まず、実行中の AIR アプリケーションで使用できるようになるいくつかの新しい API を使用して、AIR ランタイム エクスペリエンスを拡張したいと考えています。

私の最初の注文は次のとおりです。

  • .NET PInvoke に匹敵する ActionScript3 のバインディング インターフェイスを C に実装する
  • これを行うための Java SE にある API (Runtime.exec、ProcessBuilder、Process) に匹敵するプロセス起動用の API を追加します。
  • AIR アプリケーションのサポートを追加して、stdin、stdout、stderr と対話できるようにします。奇妙なことに、Adobe は AIR でのローカル ファイル アクセスのサポートを追加しましたが、これらの標準ファイル パイプとのやり取りを省略しました (ただし、AIR がサポートするすべての OS プラットフォームで検出されます)。
  • stdin、stdout、stderr を介した AMF のサポートを実装します。これにより、AIR (または Java または任意の AMF 対応言語) アプリは、AMF オブジェクトの交換を介して通信を相互処理できます。これにより、Microsoft の PowerShell のタッチが AIR に追加されます。

現在、Merapi は Java との AMF ブリッジを提供しているため、これの有効性が実証されています。悲しいかな、Merapi はプロセス間通信を行うためにローカルホスト ポートとソケットを使用する必要があります。

4

2 に答える 2

2

非常にハードコアな AIR ハッキングを行いたいようですね。独自のプロセスで AIR ランタイムをホストするのは簡単ではないと思います。ただし、Flash Player ActiveX コントロールの埋め込みを検討することもできます。これは単なる COM オブジェクトであるため、どの COM アプリケーションでも Flash Player を CoCreateInstance() できます。COM インターフェイスは十分に文書化されていませんが、参考になるいくつかの例を次に示します。

さらに下位レベルのアクセスを取得したい場合は、オープンソースのTarmain AS3 VMを埋め込むことができます。コードには、「avmshell」と呼ばれるコマンドライン シェルの例があります。Tamarin VM を自分で構築する場合は、ネイティブ C++ で実装された新しい ActionScript クラスを追加できます。Tamarin (および Flash Player) は、AS と C++ の間でこの「AVM Glue」を使用して多くの機能を実装しています。

于 2009-02-07T07:22:15.830 に答える