如何使用 Inno Setup [代码] 部分的值设置注册表项(环境变量)?

How to set registry key (environment variable) with value from [Code] section of Inno Setup?

我正在使用 Inno Setup 创建安装程序,如果用户尚未设置,我需要为他们设置环境变量。

我真正想要实现的是:

  1. 检测系统是否有名为"JAVA_HOME"的环境变量

  2. 如果已经有,则跳过剩下的步骤。如果没有,那么我会显示一个页面,提示用户输入他们安装的路径JDK,并设置为环境变量的值。

我的问题是:如何根据用户输入的值设置环境变量?我搜索了一些文章,我发现设置环境变量的唯一方法是这样

[Registry]
; set PATH
Root: HKLM; Subkey: "Environment"; ValueType:string; ValueName:"VARIABLE_NAME"; \
    ValueData:"new_value" ; Flags: preservestringtype ;

但很明显,这无法实现我想要做的事情,因为必须写入 "Before" 安装程序已构建的值。那么任何人都可以拥有任何设备吗?谢谢!

您不需要代码来设置注册表项(= 环境变量)。您只需要从代码中获取注册表项值(=环境变量值)。

您正在寻找a scripted constant

[Registry]
Root: HKLM; Subkey: "Environment"; ValueType: string; ValueName: "VARIABLE_NAME"; \
    ValueData: "{code:GetJDKPath}"; Flags: preservestringtype;

[Code]

var
  { A global variable that contains the path provided by the user in step 2 }
  JDKPath: string;

function GetJDKPath(Param: string): string;
begin
  Result := JDKPath;
end;