我有一个安装程序,我已经从仅管理员安装转换为Single Package Authoring安装程序,该安装程序可以为当前用户或所有用户安装。我的两个功能要求写入普通用户无法使用的注册表项。它们处理与另一个应用程序的集成,因此我无法在用户空间的其他位置编写注册表值...它们必须放在此位置。
如果用户不是管理员,我不会担心用户无法安装这两个特定功能,如果未选中它们,我会担心安装程序功能不会出现问题,但是我不想在功能树中显示它们全部,并确保它们不包含在“完整”安装中。
我看到的解决方案使我可以在组件周围放置条件,这样就不会安装组件...或在功能内部放置条件,以将其级别设置为较高的值。如果ALLUSERS = 2或MSIINSTALLPERUSER = 1,如何完全禁用和/或隐藏该功能。
答案 0 :(得分:0)
每个用户的设置 :我不会骗你,我会积极避免这种设置。我发现MSI的每用户安装结构“不理想”。它与可维护性差(升级,修补等)和许多其他细节有关。 Some details mid-page here。
阅读此答案的其他人的一些链接(我认为您已经阅读了这些内容):
功能条件 :如此一来,您就可以使用功能条件来根据某个条件是真还是假来取消选择功能。您甚至可以将功能的 Level
设置为 0
,这将在安装过程中将其完全从GUI中隐藏。你可以试试看。另请阅读下面的链接答案(粗体)。它包含对功能条件的更好解释。
我没有时间进行测试,但这是您可以尝试的WiX模型:
<Feature Id="MyFeature" Level="1"> <!--Default to install feature-->
<Condition Level="0"> <!--Do not install feature if condition is true-->
ALLUSERS=2 OR MSIINSTALLPERUSER=1
</Condition>
</Feature>
这些答案可能有助于您大致了解:
How to set the level of feature based on condition in wix? ( please do read this one
)。
隐藏功能测试 :我将添加一个小片段,您可以使用该片段来验证隐藏功能的操作。通过将其设置为1来强制将条件变为真实,这与使用可能会意外错误的“真实条件”相反。
<Feature Id="SupportingFiles" Title="SupportingFiles" Level="1">
<Condition Level="0">1</Condition>
</Feature>
这应该在设置GUI的视图中隐藏 SupportingFiles功能,并且也不应安装它。如果您看到其他行为,请告诉我。
自定义操作 :要基于GUI中所做的更改以交互方式隐藏功能,您可以尝试使用自定义操作来控制功能级别。
我不确定这是否行得通。如果有机会,我会进行测试。暂时只添加该链接。
更新:我现在无法对此进行调查。我想提醒您在安装过程中可能向数据库中添加临时行。也许这是“交互”隐藏功能的方法。我只是不知道,因为我从未尝试过。 Here is the first link I found on temporary records。还有towards the bottom here are links。没有保证。
除此之外,我想您可以使用外部GUI启动器。我稍后可能对此发表评论。 I recently wrote about this issue (external GUI)。
一些其他参考链接 :