C プログラムから AIR ランタイムをインプロセス共有ライブラリとしてロードするにはどうすればよいですか

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

質問

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

プロセス ビューアーで 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からCに実装する
  • これを行うためにJava SEで見つかったAPIに匹敵するプロセス起動にAPIを追加します(runtime.exec、ProcessBuilder、Process)
  • Stdin、Stdout、Stderrと対話できるように、航空アプリケーションのサポートを追加します。奇妙なことに、AdobeはAIRでのローカルファイルアクセスのサポートを追加しましたが、これらの標準ファイルパイプとのやり取りを省略しています(ただし、AIRサポートがサポートするOSプラットフォームで見つかります)。
  • Stdin、Stdout、Stderrを介したAMFのサポートを実装してください。そのため、AIR(またはJavaまたはAMF対応言語)アプリは、AMFオブジェクトを交換して通信をインターアクセスできます。これにより、MicrosoftのPowerShellのタッチが追加されます。

現在、Merapi は Java との AMF ブリッジを提供しているため、その有効性が実証されています。悲しいことに、Merapi はプロセス間通信を行うためにローカルホストのポートとソケットを使用する必要があります。これは、代わりに stdin/stdout/stderr プロセス間パイプを使用するのと比べて不器用な方法です。

役に立ちましたか?

解決 2

私の質問で行おうとしていたことは、Adobe によって禁止されていることがわかりました (商用利用の可能性がある場合に限る)。

から Adobe® AIR™ ランタイム配布に関するよくある質問:

文書化されていない方法または目的で、Adobe Air Runtime、インストーラーファイル、または抽出されたインストーラーファイルを配布または使用します。たとえば、配布できない場合があります。 直接電話するか、ソフトウェアアプリケーション内のAdobe Airライブラリまたはランタイムコンポーネントのいずれかのラッパーを書きます。Runtime.dll、Runtime Executables、Template.exe、およびTemplate.Appは、ランタイムコンポーネントの例です。

他のヒント

かなり本格的な 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」を使用して機能の多くを実装します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top