Inno Setupを使用して、作業中のプロジェクトのインストーラーを作成しています。これは、java環境変数を設定するために必要です。これにより、cmdを実行したときに、javanotfoundエラーなどが発生しなくなります。
Inno Setupと環境変数の設定に関連する他の投稿をいくつか見つけましたが、このインスタンスに固有の何かを知っている人はいますか?
Inno Setupを使用して、作業中のプロジェクトのインストーラーを作成しています。これは、java環境変数を設定するために必要です。これにより、cmdを実行したときに、javanotfoundエラーなどが発生しなくなります。
Inno Setupと環境変数の設定に関連する他の投稿をいくつか見つけましたが、このインスタンスに固有の何かを知っている人はいますか?
Javaがデフォルトのロケーションプログラムファイル/Javaにインストールされていると仮定すると、次のようなものが機能するはずです。
[Registry]
; set PATH
Root: HKCU; Subkey: "Environment"; ValueType:string; ValueName:"PATH"; ValueData:"{olddata};{pf}\Java\bin"; Flags: preservestringtype
; set JAVA_HOME
Root: HKCU; Subkey: "Environment"; ValueType:string; ValueName:"JAVA_HOME"; ValueData:"{pf}\Java"; Flags: preservestringtype
[Setup]
; Tell Windows Explorer to reload the environment
ChangesEnvironment=yes
設定する環境変数(PATHまたはJAVA_HOME)がわからないため、両方を追加しました。
Javaインストーラーはそれ自体をパスに追加する傾向があるため、PATHを変更する必要はありません。IIRCは、java.exeとjavaw.exeをシステムディレクトリの1つにコピーします。
@Joniの答えに加えて、レジストリからJavaインストールディレクトリを取得し、スクリプト定数を使用して環境変数を設定できます。
(編集:コード修正のための@TLamaに感謝します!)
[Registry]
Root: HKCU; Subkey: "Environment"; ValueType:string; ValueName:"JAVA_HOME"; ValueData:"{code:GetJava32Path|6}"; Flags: preservestringtype
[Code]
const
RegKeyJRE = 'SOFTWARE\JavaSoft\Java Runtime Environment\';
function GetJava32Path(MinVersion: string): string;
var
I: Integer;
Path: string;
Versions: TArrayOfString;
begin
Result := '';
if RegGetSubkeyNames(HKLM, RegKeyJRE, Versions) then
for I := 0 to GetArrayLength(Versions)-1 do
if (Versions[I][2] = '.') and (Versions[I][3] >= MinVersion) and
RegQueryStringValue(HKLM32, RegKeyJRE + Versions[I], 'JavaHome', Path) then
begin
Result := Path;
Exit;
end;
end;
(NB私はPascalスクリプトの専門家にはほど遠いですが、コードははるかに優れている可能性がありますが、現在は@TLamaによって修正されています:))