2

我有一个安装程序,我正在将其从仅管理员安装转换为能够为当前用户或所有用户安装的单包创作安装程序。我的两个功能需要写入普通用户无法使用的注册表项。他们处理与另一个应用程序的集成,所以我不能在用户空间的其他地方写入注册表值......他们必须进入这个位置。

如果用户不是管理员,我不担心用户无法安装这两个特定功能,如果未选择安装程序,则安装程序功能不会出现问题,但我不想在功能树中显示它们并确保它们不包含在“完整”安装中。

我见过的解决方案让我在组件周围设置条件,这样组件就不会被安装......或者在功能内部设置一个条件,将它的级别设置为某个高值。如果 ALLUSERS=2 或 MSIINSTALLPERUSER=1,我如何完全禁用和/或隐藏该功能。

4

1 回答 1

0

每个用户设置:我不会骗你,我会积极避免这种设置。我发现 MSI 的每用户安装结构“不理想”。它与较差的可维护性(升级、修补等)和许多其他细节有关。页面中间的一些细节在这里

阅读此答案的其他人的一些链接(我认为您已阅读这些):

特征条件:话虽如此,您可以使用特征条件根据某个条件是真还是假来取消选择特征。您甚至可以设置在安装期间将其完全从 GUI 中隐藏Level的功能0你可以试试这个。另请阅读下面的链接答案(粗体)。它包含对特征条件的更好解释。

我没有时间对此进行测试,但是您可以尝试以下 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>

这些答案可能会帮助您对此有所了解:


隐藏功能测试:我将添加一个小片段,您可以使用它来验证功能隐藏的操作。它通过将其设置为 1 来强制相关条件为真 - 而不是使用可能意外为假的“真实条件”。

<Feature Id="SupportingFiles" Title="SupportingFiles" Level="1">
   <Condition Level="0">1</Condition>
</Feature>

这应该在设置 GUI 中隐藏SupportingFiles 功能,并且它也不应该安装它。如果您看到不同的行为,请告诉我。


自定义操作:要基于 GUI 中所做的更改以交互方式隐藏功能,您可以尝试使用自定义操作来控制功能级别。

我不确定这会奏效。当我有机会时,我会测试。现在只需添加该链接。

更新:我现在无法对此进行调查。我想提醒您在安装期间向数据库添加临时行的可能性。也许这是“交互式”隐藏功能的方法。我只是不知道,因为我从未尝试过。这是我在临时记录中找到的第一个链接底部是链接。没有保证。

除此之外,我想您可以使用外部 GUI 启动器。我稍后可能会对此发表评论。我最近写了关于这个问题(外部 GUI)


一些进一步的参考链接

于 2018-10-08T21:32:08.667 回答