0

ディスクレスの状況を想定して、(Java で) メモリ内の解凍された exe (およびそれぞれのサポート ファイル) からプロセスを作成するにはどうすればよいですか?

ここここでメモリに解凍する方法を見てきましたが、byte[] または InputStream から、つまり (ファイルシステム) コマンド文字列なしでプロセスを作成する方法が見つかりません。

アイデアは、スタンドアロンでの使用を許可せずにサードパーティ コンポーネントを Java アプリケーション/プロジェクトにバンドルし、パスワードで保護された Zip にバンドルすることです。私のプログラムの実行中に、メモリ (exe + サポート ファイル) に解凍され、次のように、後の OutputStream 書き込みに備えます。

Process process = ?
OutputStream output = process.getOutputStream();
...
output.write("my commmand to 3rd party component");

ヒントはありますか?

前もって感謝します、

4

2 に答える 2

0

いくつかの可能なアプローチを見ることができます:

  1. メモリ内ファイルシステムに解凍します。
  2. ZIP ファイルからクラスを直接ロードするカスタムクラス ローダーを記述します。

2 つのうち、最初のほうがおそらく作業が少なくて済みます。

于 2012-05-16T13:24:12.893 に答える
0

Windows では、OS から見えるファイルシステムにプロセスのイメージが存在する必要があります。これは、EXE が展開される "ディスク" (正確には、カーネル モード ドライバーによって公開されるシステム全体の可視ファイル システム) が必要であることを意味します。

EXE を起動するのに適した仮想ファイル システムを作成するために使用できる製品をいくつか提供していますが、これらすべての製品でカーネル モード ドライバーのインストールが必要です。これはまさに、Windows が動作するように設計された方法です。

そのため、ストリームからネイティブ EXE (PE 形式) を実行しても、残念ながら動作しません。.NET アセンブリはメモリ内/メモリからロードでき、Java クラスも Java ランタイム機能を使用してどこからでもロードできますが、ネイティブ プロセスの場合はそうではありません。

于 2012-05-16T14:16:47.890 に答える