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 はプロセス間通信を行うためにローカルホスト ポートとソケットを使用する必要があります。