gpt4 book ai didi

conditional - 如何只允许在 InnoSetup 中安装特定组件?

转载 作者:行者123 更新时间:2023-12-04 16:40:33 26 4
gpt4 key购买 nike

所以问题是这样的:
我在这里问了一个问题:How to allow installation only to a specific folder?

我该如何修改它,例如,我有 3 个文件要安装,其中 2 个是可选的,并且只有在某个文件/文件夹存在时才可以安装。如果不满足条件,我想将在列表中选择它们的选项灰显?

先感谢您。
索特

最佳答案

我会尝试执行以下操作。它将访问组件列表项,通过它们的索引禁用和取消选中它们,从 [Components] 的顺序中从 0 开始的数字是多少?部分。不含 fixed 的项目标志(如本例中)默认启用,因此您需要检查条件是否未满足。您也可以查看 commented version 这篇文章的:

[Components]
Name: Component1; Description: Component 1
Name: Component2; Description: Component 2
Name: Component3; Description: Component 3

[code]
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpSelectComponents then
if not SomeCondition then
begin
WizardForm.ComponentsList.Checked[1] := False;
WizardForm.ComponentsList.ItemEnabled[1] := False;
WizardForm.ComponentsList.Checked[2] := False;
WizardForm.ComponentsList.ItemEnabled[2] := False;
end;
end;

上述解决方案至少有一个弱点。索引可能是从 [Components] 的原始顺序改组的。设置 ComponentsList.Sorted 时的部分为真。如果你不使用它,使用上面的代码可能就足够了,如果是,那就更复杂了。

没有简单的获取组件名称的方法(内部存储为 TSetupComponentEntry 对象在每个 item 的 ItemObject 中),只有描述,所以这里是另一种方法,不同之处在于 item 索引正在按其指定的描述进行搜索。
procedure CurPageChanged(CurPageID: Integer);
var
Index: Integer;
begin
if CurPageID = wpSelectComponents then
if not SomeCondition then
begin
Index := WizardForm.ComponentsList.Items.IndexOf('Component 2');
if Index <> -1 then
begin
WizardForm.ComponentsList.Checked[Index] := False;
WizardForm.ComponentsList.ItemEnabled[Index] := False;
end;
Index := WizardForm.ComponentsList.Items.IndexOf('Component 3');
if Index <> -1 then
begin
WizardForm.ComponentsList.Checked[Index] := False;
WizardForm.ComponentsList.ItemEnabled[Index] := False;
end;
end;
end;

关于conditional - 如何只允许在 InnoSetup 中安装特定组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10283508/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com