我正在使用以下代码,
<Directory Id="dir2" Name="Folder">
<Component Id="comp_one" Guid="{0D827414-5629-48A0-9DC1-9344C5C6EBFC}">
<Condition>INSTALLSAMPLES</Condition>
<File Id="file_one" Source="..\..\..\fileone.exe" />
</Component>
</Directory>
上面的代码工作正常,如果条件为false,则跳过Folder
。
但是,如果Folder
为false,则会创建以下代码SubFolder
和Condition
。是否有任何解决方案可以根据条件跳过目录?
<Directory Id="dir1" DiskId="3" Name="Folder">
<Directory Id="dir2" Name="SubFolder">
<Component Id="comp_one" Guid="{0D827414-5629-48A0-9DC1-9344C5C6EBFC}">
<Condition>INSTALLSAMPLES</Condition>
<File Id="file_one" Source="..\..\..\fileone.exe" />
</Component>
</Directory>
</Directory>
请帮我解决问题。
答案 0 :(得分:2)
根据丰富的经验,我建议组件条件不能很好地扩展。它们真的适用于像VersionNT和Not VersionNT这样的东西,你可能需要在Win 9X上安装一个DLL / EXE,在NT / 2K / XP等上安装另一个互斥文件。
相反,您应该将这些组件与功能相关联,并让用户使用“自定义设置”对话框启用/禁用该功能。使用“特征条件”和/或“添加本地/删除控制事件”可以进行更复杂的抽象。
您使用名为INSTALLSAMPLES的属性的事实告诉我您应该有一个名为SAMPLES的功能。
答案 1 :(得分:0)
其目标文件夹是MSI组件的“标识”的一部分。无条件地在几个目标文件夹中“浮动”单个组件。但是,您始终可以定义多个组件,每个组件都定位到不同的文件夹,但是来自同一个文件,并有条件地安装一个或另一个(或两者!)。
但是Painter先生知道他在谈论什么(几乎所有的安装问题)。最佳实践是调整功能(组件集合),而不是直接组件。