我正在使用Inno Setup为我正在开发的项目创建一个安装程序,并且我需要它来设置java环境变量,以便当它们运行cmd时它们不会获得java找不到错误,或类似的东西。Inno Setup - 设置Java环境变量
我发现了一些与Inno Setup和设置环境变量相关的其他帖子,但有人知道这个实例特有的东西吗?
我正在使用Inno Setup为我正在开发的项目创建一个安装程序,并且我需要它来设置java环境变量,以便当它们运行cmd时它们不会获得java找不到错误,或类似的东西。Inno Setup - 设置Java环境变量
我发现了一些与Inno Setup和设置环境变量相关的其他帖子,但有人知道这个实例特有的东西吗?
假设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复制到其中一个系统目录。
加起来@乔尼的答案,你可以从注册表中的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纠正:))
不Java运行安装程序已经做到这一点? – Deanna