インストーラーは jdk を使用してキーストアを生成しますkeytool
。最近、jdk 7 にアップグレードして以来、32/64 ビットの統合、特に 64 ビット サーバーに 32 ビット バージョンをインストールしようとしたときに問題が発生しました (なぜこれを行っているのか聞かないでください。私はすでにその戦いに負けました)。 )。問題はkeytool
、インストーラーから実行しようとすると、キーストアの生成に失敗し、エラーがスローされることです。
java.lang.InternalError: ここに来るべきではありません。
スタック トレースの最初の数行:
at sun.nio.fs.WindowsNativeDispatcher.GetFinalPathNameByHandle(Native Method)
at sun.nio.fs.WindowsLinkSupport.getFinalPath(WindowsLinkSupport.java:77)
at sun.nio.fs.WindowsLinkSupport.getRealPath(WindowsLinkSupport.java:242)
at sun.nio.fs.WindowsPath.toRealPath(WindowsPath.java:836)
at sun.nio.fs.WindowsPath.toRealPath(WindowsPath.java:44)
この行の実行:
nsExec::ExecToLog '"$InstallationRoot\$ConfigName\jdk\bin\keytool.exe" -genkey -keystore "$InstallationRoot\$ConfigName\tomcat\tomcat.jks" -alias tomcat -keyalg RSA -validity 109500 -storepass password -keypass password -dname CN=$server,OU=Syseng,O=Company,L=City,ST=State,C=US'
変数はすべて有効で、インストーラ全体で使用されます。実行中の正確な行を出力しようとしDetailPrint
、出力をコピーしてコマンドラインに貼り付けたところ、機能しました。
"C:\TempInstallDir\Inst1\jdk\bin\keytool.exe" -genkey -keystore "C:\TempInstallDir\Inst1\tomcat\tomcat.jks" -alias tomcat -keyalg RSA -validity 109500 -storepass password -keypass password -dname CN=SANDBOX,OU=Syseng,O=Company,L=City,ST=State,C=US
- また、 と を使用してみ
Exec
ましExecWait
たnsExec
。 - コマンドをバッチファイルに書き込んで
keytool
、インストーラーから呼び出してみました。繰り返しになりますが、インストーラーからどのように呼び出されても同じ例外が発生しましたが、コマンドラインに移動して同じバッチファイルを実行しただけでは機能しました. - を使用して、32ビットコマンドプロンプトで強制的に実行しようとしました
%WINDIR%\SysWOW64\cmd.exe /C
。
ここでは基本的にアイデアがありません-インストーラーで実行することで確実に失敗させ、コマンドラインからまったく同じコマンドを直接実行することで確実に機能させることができます。また、32 ビット サーバーから実行したり、64 ビット サーバーで 64 ビット インストーラーを実行したりしても問題なく動作します。
また、インストーラーを管理者として実行しています。そうしないと、失敗する他のステップがあります。これは、Windows Server 2008 R2 と Windows 7 の両方で発生しています。
誰もこれを見たことがありますか?その場合、回避策は何ですか (64 ビット インストールを使用する以外に)? 一方、実際に回避策がなく、64 ビットを使用する必要がある場合は、これを再び取り上げるための弾薬が少し増えます。