Inno Setup-在“准备安装”页面上显示自定义组件 [英] Inno Setup - Show custom components on Ready to Install page
本文介绍了Inno Setup-在“准备安装”页面上显示自定义组件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想将ini文件中的组件和选定的用户添加到准备安装页面。
这可能吗?
它应该看起来像这样的示例:
类似
function GetUserName:string;
开始
结果:= WizardSetupType(False);
结尾;
函数GetProgramsToInstall:TStrings;
开始
结果:= TStringList.Create;
Result.CommaText:=
GetIniString('Users',GetUserName,',ExpandConstant('{src} \UserPrograms.ini'));
结尾;
函数ShouldInstallProgram(ProgramName:string):布尔值;
var
程序:TStrings;
开始
程序:= GetProgramsToInstall;
结果:=(Programs.IndexOf(ProgramName)> = 0);
Log(Format('Program [%s]-%d',[ProgramName,Result]));
程序。免费;
结尾;
过程AddToReadyMemo(var Memo:string; Info,NewLine:string);如果Info<>
从
开始’然后是备忘录:=备忘录+信息+换行符+换行符;
结尾;
函数UpdateReadyMemo(
Space,NewLine,MemoUserInfoInfo,MemoDirInfo,MemoTypeInfo,MemoComponentsInfo,
MemoGroupInfo,MemoTasksInfo:String):字符串;
var
程序:TStrings;
I:整数;
begin
AddToReadyMemo(Result,MemoUserInfoInfo,NewLine);
AddToReadyMemo(Result,MemoDirInfo,NewLine);
AddToReadyMemo(Result,MemoTypeInfo,NewLine);
AddToReadyMemo(Result,MemoComponentsInfo,NewLine);
AddToReadyMemo(Result,MemoGroupInfo,NewLine);
AddToReadyMemo(Result,MemoTasksInfo,NewLine);
结果:=
结果+
‘所选用户:’+ NewLine +
空格+ GetUserName + NewLine + NewLine;
程序:= GetProgramsToInstall;如果Programs.Count>
0,然后
开始
结果:=结果+‘组件:’+换行符;
for I:= 0 to Programs.Count-1 do
结果:=结果+空格+程序[I] +换行;
结尾;
程序。免费;
结尾;
I would like to add my components and the selected user from the ini file to the Ready to Install page. Is this even possible?
It should look like this example:
This is my ini file:
[Users]
user1=Program1,Program3
user2=Program1,Program2
user3=Program1,Program3
user4=Program1,Program2
And my script:
[Files]
Source: "TEST \Software\x64\Program_1"; DestDir: "{app}\Program_1"; \
Flags: ignoreversion recursesubdirs; Check: ShouldInstallProgram('Program1')
Source: "TEST \Software\x64\Program_2"; DestDir: "{app}\Program_2"; \
Flags: ignoreversion recursesubdirs; Check: ShouldInstallProgram('Program2')
Source: "TEST \Software\x64\Program_3"; DestDir: "{app}\Program_3"; \
Flags: ignoreversion recursesubdirs; Check: ShouldInstallProgram('Program3')
[Code]
function ShouldInstallProgram(ProgramName: string): Boolean;
var
UserName: string;
ProgramsStr: string;
Programs: TStringList;
begin
UserName := WizardSetupType(False);
ProgramsStr :=
GetIniString('Users', UserName, '', ExpandConstant('{src}\UserPrograms.ini'));
Programs := TStringList.Create;
Programs.CommaText := ProgramsStr;
Result := (Programs.IndexOf(ProgramName) >= 0);
Programs.Free;
end;
解决方案
Implement UpdateReadyMemo
event function. See Add text to 'Ready Page' in Inno Setup
Something like this:
function GetUserName: string;
begin
Result := WizardSetupType(False);
end;
function GetProgramsToInstall: TStrings;
begin
Result := TStringList.Create;
Result.CommaText :=
GetIniString('Users', GetUserName, '', ExpandConstant('{src}\UserPrograms.ini'));
end;
function ShouldInstallProgram(ProgramName: string): Boolean;
var
Programs: TStrings;
begin
Programs := GetProgramsToInstall;
Result := (Programs.IndexOf(ProgramName) >= 0);
Log(Format('Program [%s] - %d', [ProgramName, Result]));
Programs.Free;
end;
procedure AddToReadyMemo(var Memo: string; Info, NewLine: string);
begin
if Info <> '' then Memo := Memo + Info + Newline + NewLine;
end;
function UpdateReadyMemo(
Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, MemoComponentsInfo,
MemoGroupInfo, MemoTasksInfo: String): String;
var
Programs: TStrings;
I: Integer;
begin
AddToReadyMemo(Result, MemoUserInfoInfo, NewLine);
AddToReadyMemo(Result, MemoDirInfo, NewLine);
AddToReadyMemo(Result, MemoTypeInfo, NewLine);
AddToReadyMemo(Result, MemoComponentsInfo, NewLine);
AddToReadyMemo(Result, MemoGroupInfo, NewLine);
AddToReadyMemo(Result, MemoTasksInfo, NewLine);
Result :=
Result +
'Selected user:' + NewLine +
Space + GetUserName + NewLine + NewLine;
Programs := GetProgramsToInstall;
if Programs.Count > 0 then
begin
Result := Result + 'Components:' + NewLine;
for I := 0 to Programs.Count - 1 do
Result := Result + Space + Programs[I] + NewLine;
end;
Programs.Free;
end;
这篇关于Inno Setup-在“准备安装”页面上显示自定义组件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文