2012-05-21 132 views
5

我正在使用Inno Setup爲我正在開發的項目創建一個安裝程序,並且我需要它來設置java環境變量,以便當它們運行cmd時它們不會獲得java找不到錯誤,或類似的東西。Inno Setup - 設置Java環境變量

我發現了一些與Inno Setup和設置環境變量相關的其他帖子,但有人知道這個實例特有的東西嗎?

+0

不Java運行安裝程序已經做到這一點? – Deanna

回答

10

假設JRE安裝在其默認位置程序文件/ 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 - 所以我把它們都加了。

更改PATH不應該是必需的,因爲Java安裝程序傾向於將自己添加到路徑; IIRC將java.exe和javaw.exe複製到其中一個系統目錄。

+3

不要忘記ChangesEnvironment指令。 – Deanna

+0

@Deanna謝謝,我不知道那個!現在我可以刪除從我們的安裝程序重新啓動的要求。 – Joni

+0

對不起,遲到的回覆,但這是我正在尋找和完美工作的答案。 – Howes

2

加起來@喬尼的答案,你可以從註冊表中的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糾正:))

+0

你的代碼是絕對正確的(可以通過刪除那些額外的'begin..end'塊來['shortened'](http://pastebin.com/bttNaCEG),JRE註冊表鍵路徑可能有一個常量( DRY類型),可以使用'和'運算符刪除一個'if',並且從該函數返回可能是'exit'而不是'break' - 所有次要的或美化的東西)。 – TLama

+0

@TLama非常感謝,我已經粘貼了你的代碼並學到了一些東西:) – Matthieu

+0

非常歡迎你! – TLama