1

レジストリ エントリにアクセスする Java Service Wrapper アプリケーションがあります。(ええ、私は知っています、奇妙ですよね? ご参考までに、この質問に対するDavid のソリューションを使用して、Java を使用してレジストリから読み取ります。)

32 ビット バージョンの Windows では、すべて正常に動作します。コンソールから (Java Service Wrapper の .bat ファイルを使用して) アプリケーションを実行することも、bat ファイルからインストールされたサービスとしてアプリケーションを実行することもできます。Windows レジストリから、必要なさまざまなものを確認できます。

ただし、64 ビット Windows システムでは、アプリケーションをサービスとして実行するときに必要なレジストリ エントリが表示されなくなりました。エントリはすべて null のように見えます。ただし、コンソールでは引き続き機能します。

私の仮説は、コンソールから (関連する場合は管理ユーザーとして) Java Service Wrapper を実行すると、64 ビット JVM が開始され、通常の 64 ビット レジストリにアクセスできるというものです。次に、サービスとして (LOCALSYSTEM ユーザーを介して) 実行すると、32 ビット JVM が開始されます (これは、Wow6432 ビット ノードの非常に特別な 32 ビット レジストリにアクセスしようとします。探しているエントリは次のとおりです。このノードには存在しないため、この場合に null 値を取得する理由が説明されます。

これは私の質問につながります: Java Service Wrapper が、サービス リストから起動したときに 32 ビット JVM を起動するのはなぜですか? また、コンソールから起動したときに 64 ビット JVM を起動するのはなぜですか?

注:私はJava Service Wrapper 3.5.14を使用しており、設定ファイルに

wrapper.java.additional.auto_bits=TRUE

理想的には、JVM の選択を自動的に維持したいので、1 つのインストーラーを使用して 32 ビット システムと 64 ビット システムの両方にソフトウェアを展開できます。(実際、これが私が Tomcat ではなく JSW を使用することを選択した理由の 1 つです。)

読んでくれてありがとう。

4

1 に答える 1

1

インストーラー (サービスのインストールと開始に使用していたもの) が 32 ビット アプリケーションであることが判明しました。これにより、インストール プロセス中に Java Service Wrapper .bat ファイルが 32 ビット環境で実行されます。64 ビット システムには 32 ビット Java がないため、これはラッパーが Java を見つけられないことを意味します。

(Tanuki Software のサポートの親切な人々から学んだ) トリックは、64 ビット システムの 32 ビット環境で実行していることがわかっている場合、.bat ファイルに 64 ビット ラッパーを実行するように指示することです。

基本的に、.bat ファイルでこれらの行を見つけて、指定された行を挿入します。さらに問題が発生した場合は、回答を更新します。しかし、今のところ、このソリューションは私にとって非常にうまく機能しているようです。

rem
rem Decide on the specific Wrapper binary to use (See delta-pack)
rem
if "%PROCESSOR_ARCHITEW6432%"=="AMD64" goto amd64 (<---- insert this line)
if "%PROCESSOR_ARCHITECTURE%"=="AMD64" goto amd64
if "%PROCESSOR_ARCHITECTURE%"=="IA64" goto ia64
于 2012-06-01T18:41:25.293 に答える