我正在使用Inno安装程序为我正在处理的项目创建一个安装程序,我需要它来设置java环境变量,这样当它们运行cmd时它们没有找到 java not found < / em>错误,或类似的东西。
我找到了一些与Inno Setup和设置环境变量相关的帖子,但有没有人知道这个实例特有的东西?
答案 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纠正了:))