Inno设置 - 设置Java环境变量

时间:2012-05-21 14:28:21

标签: environment-variables inno-setup

我正在使用Inno安装程序为我正在处理的项目创建一个安装程序,我需要它来设置java环境变量,这样当它们运行cmd时它们没有找到 java not found < / em>错误,或类似的东西。

我找到了一些与Inno Setup和设置环境变量相关的帖子,但有没有人知道这个实例特有的东西?

2 个答案:

答案 0 :(得分:12)

假设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 - 所以我已经添加了它们。

不应该更改PATH,因为Java安装程序倾向于将自己添加到路径中; IIRC它将java.exe和javaw.exe复制到其中一个系统目录。

答案 1 :(得分:2)

加上@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;

(N.B。我远不是一个Pascal脚本专家,代码可能会好很多,虽然现在已被@TLama纠正了:))