2012-05-21 76 views
5

Inno Setupを使用して、私が取り組んでいるプロジェクトのインストーラを作成していますが、Java環境変数を設定する必要があります。 javaが見つかりませんエラーなどです。Inno Setup - Java環境変数を設定する

私はInno Setupと環境変数の設定に関連する他の記事をいくつか見つけましたが、このインスタンス固有のものは誰か知っていますか? - PATHやJAVA_HOMEを

[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 

私はあなたが設定したい環境変数わからない:Javaがデフォルトの場所プログラムファイル/ Javaでインストールされている、このようなものは、あなたのケースで動作するはずと仮定すると、

+0

は、Javaランタイムのインストーラは、すでにこれを実行しません(NBは、私は今、それが@TLamaによって修正されたものの、コードは:)、たくさん良いかもしれ遠くパスカル・スクリプトの専門家であることからです) ? – Deanna

答えて

10

- 私はそれらを両方追加しました。

Javaインストーラがパスに自身を追加する傾向があるため、PATHを変更する必要はありません。 IIRCはjava.exeとjavaw.exeをシステムディレクトリの1つにコピーします。ジョニの答え@まで、レジストリからのJavaのインストールディレクトリを取得し、環境変数を設定するには、スクリプトの定数を使用することができます追加

+3

ChangesEnvironmentディレクティブを忘れないでください。 – Deanna

+0

@Deannaありがとう、私はそのことについて知りませんでした!今私は私たちのインストーラから再起動するための要件を削除することができます。 – Joni

+0

遅れて申し訳ありませんが、これは私が探していた答えであり、完璧に働いていました。 – Howes

2

(EDIT:コード修正のための@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; 

+0

あなたのコードは間違いなく正しいものです(余分な 'begin..end'ブロックを削除することで、' '短縮された可能性があります(http://pastebin.com/bttNaCEG)、JREレジストリキーパスの定数があるかもしれませんDRYソート)、 'and'演算子を使って' if'を1つ取り除くことができ、関数からの戻り値が 'break'ではなく' exit'だった可能性があります。 – TLama

+0

@ TLamaありがとう、コードを貼り付けていくつか学んだことがあります:) – Matthieu

+0

大歓迎です! – TLama

関連する問題