11

Windowsでサイドバイサイド(SxS)でJavaアプリを実行しようとしているときに、非常にあいまいな問題に直面しています。

JRE と同じフォルダーにある java.exe.config および java.exe.manifest ファイルを作成するすべての準備を完了しました。

コマンド ラインから (.bat ファイルを開始して) アプリケーションを呼び出すと、アプリケーションは正常に実行されます。.bat ファイルは、SxS で構成された Java を使用します (これは、アプリケーションを実行しているボックス内の唯一のものです)。

Runtime.getRuntime.exec()ただし、別のJavaプロセス内から(を使用して)呼び出そうとするProcessBuilderと、SxS構成が完全に無視され、子JavaプロセスがCOMライブラリを見つけることができないと不平を言っているため、SxSを実行する必要がありました。親 Java プロセスも、SxS 用に構成された Java.exe によって起動されることを付け加える必要があります。したがって、" Runtime.getRuntime(), ProcessBuilder()" によって Java SxS がロードされた環境が得られると思います。

いくつかの Windows ツール (procexp.exe、procmon.exe) を使用してさらにデバッグを行うと、次のことがわかりました。 )。ただし、別のプロセスが Java によって生成された場合、.manifest ファイルはまったく考慮されません。私が考えることができる1つの問題は、プロセスを開始するJava.exeの現在のディレクトリが、java.exe.manifestファイルが配置されているものと同じではないことです。

私が考えることができる唯一のことは、Javaランチャーのバグ/問題(または機能と呼ぶかもしれません)です。

誰かが同様の問題を抱えていましたか?誰かが上記に光を当てることができますか? とても有難い。

これまでのところ、私は次のことを試しました:

  • .bat ファイル内から Java プロセスを実行します。働いた
  • を使用して、親 Java プロセスから Java プロセスを呼び出しました。Runtime.getRuntime().exec(). DID NOT WORK
  • Invoked the .bat file from a parent Java process using Runtime.getRuntime().exec(). 動作しませんでした
  • ProcessBuilder を使用して、.manifest ファイルがある現在のディレクトリを設定しました。動作しませんでした
4

1 に答える 1

1

コンピューターでテストしましたが、動作します。試す:

  • Runtime.getRuntime().exec(...); から getErrorStream() を読み取ります。これを解決できない場合は、ここに送信してください。
  • フルパス (C:\Program...) でプロセスを実行し、
  • Java プログラムを .jar にコンパイルし、.bat を含むフォルダーに入れ、CMD を開き、現在のディレクトリをこのフォルダーに設定し、jar ファイルを実行します (java -jar filename.jar を使用)。
于 2015-04-30T19:50:23.267 に答える