Inno Setup:使用注册表部分自定义向导页面中的数据

Inno Setup: Use data from custom wizard page in Registry section

我想知道如何使用来自自定义向导页面的用户输入的值。我有一个自定义页面,用户可以在该页面上键入 ODBC 连接数据。这是这部分的代码:

ServerDataPage := CreateInputQueryPage(AskAuthPage.ID,
    'SQL Server Connection Data', '',
    'Please insert data...');
ServerDataPage.Add('ODBC Name:', False);
ServerDataPage.Add('Server Name:', False);
ServerDataPage.Add('User:', False);
ServerDataPage.Add('Password:', False);

这几乎可以正常工作。出现带有输入框和标题的页面。

我还从 Inno Setup 中查找了一个示例。有这一行:

ExamplePage.Values[0] := GetPreviousData('Name', ExpandConstant('{sysuserinfoname}'));

所以我认为必须有一个 "backward" 东西,例如:

thisIsAVariable := ServerDataPage.Values[x]

我可以使用这些变量来创建这样的 ODBC 吗?

Root: HKCU; SubKey: Software\ODBC\ODBC.INI\ODBC Data Sources; ValueType: string; ValueName: Leist; ValueData: SQL Server; Flags: createvalueifdoesntexist uninsdeletevalue
Root: HKCU; SubKey: Software\ODBC\ODBC.INI\Leist; Flags: createvalueifdoesntexist uninsdeletevalue; ValueName: Driver; ValueType: string; ValueData: {sys}\SQLSRV32.dll
Root: HKCU; SubKey: Software\ODBC\ODBC.INI\Leist; Flags: createvalueifdoesntexist uninsdeletevalue; ValueName: Server; ValueType: string; ValueData: SERVERADRESS
Root: HKCU; SubKey: Software\ODBC\ODBC.INI\Leist; Flags: createvalueifdoesntexist uninsdeletevalue; ValueName: Database; ValueType: string; ValueData: DATABASE NAME
Root: HKCU; SubKey: Software\ODBC\ODBC.INI\Leist; Flags: createvalueifdoesntexist uninsdeletevalue; ValueName: LastUser; ValueType: string; ValueData: USER
Root: HKCU; SubKey: Software\ODBC\ODBC.INI\Leist; Flags: createvalueifdoesntexist uninsdeletevalue; ValueName: Password; ValueType: string; ValueData: PASSWORD

如果是这样,我必须将它放在脚本的什么位置?整个 "custom wizard pages" 都在 [Code] 部分。这些变量是否也可以在此 [Code] 部分之外使用?

问候

使用 scripted constant 以使用 [Registry](或任何其他)部分中自定义页面的值:

[Registry]
Root: HKCU; SubKey: Software\ODBC\ODBC.INI\ODBC Data Sources; \
    ValueType: string; ValueName: Leist; ValueData: SQL Server; \
    Flags: createvalueifdoesntexist uninsdeletevalue
Root: HKCU; SubKey: Software\ODBC\ODBC.INI\Leist; \
    Flags: createvalueifdoesntexist uninsdeletevalue; ValueName: Driver; \
    ValueType: string; ValueData: {sys}\SQLSRV32.dll
Root: HKCU; SubKey: Software\ODBC\ODBC.INI\Leist; \
    Flags: createvalueifdoesntexist uninsdeletevalue; ValueName: Server; \
    ValueType: string; ValueData: {code:GetServerData|0}
Root: HKCU; SubKey: Software\ODBC\ODBC.INI\Leist; \
    Flags: createvalueifdoesntexist uninsdeletevalue; ValueName: Database; \
    ValueType: string; ValueData: {code:GetServerData|1}
Root: HKCU; SubKey: Software\ODBC\ODBC.INI\Leist; \
    Flags: createvalueifdoesntexist uninsdeletevalue; ValueName: LastUser; \
    ValueType: string; ValueData: {code:GetServerData|2}
Root: HKCU; SubKey: Software\ODBC\ODBC.INI\Leist; \
    Flags: createvalueifdoesntexist uninsdeletevalue; ValueName: Password; \
    ValueType: string; ValueData: {code:GetServerData|3}
[Code]

var
  ServerDataPage: TInputQueryWizardPage;

function GetServerData(Param: string): string;
begin
  Result := ServerDataPage.Values[StrToInt(Param)];
end;