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 ファイルがある現在のディレクトリを設定しました。動作しませんでした