Wix &引用;隐藏“;基于ALLUSERS/MSIINSTALLPERUSER的功能

Wix &引用;隐藏“;基于ALLUSERS/MSIINSTALLPERUSER的功能,wix,windows-installer,wix3.11,Wix,Windows Installer,Wix3.11,我有一个安装程序,我正在将其从一个仅限管理员的安装程序转换为一个能够为当前用户或所有用户安装的安装程序。我的两个特性要求写入一个常规用户无法使用的注册表项。它们处理与另一个应用程序的集成,因此我无法在用户空间中的其他地方写入注册表值。。。他们必须去这个地方 我不担心用户如果不是管理员就无法安装这两个特定功能,如果未选中,安装程序功能将不会出现问题,但我不想在功能树中显示它们,并确保它们不包含在“完整”安装中 我看到的解决方案让我在组件周围设置了条件,这样组件就不会被安装。。。或者在功能内部设置一

我有一个安装程序,我正在将其从一个仅限管理员的安装程序转换为一个能够为当前用户或所有用户安装的安装程序。我的两个特性要求写入一个常规用户无法使用的注册表项。它们处理与另一个应用程序的集成,因此我无法在用户空间中的其他地方写入注册表值。。。他们必须去这个地方

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

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

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

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

特征条件:也就是说,您可以使用特征条件根据特定条件是真是假来取消选择特征。您甚至可以将功能的
级别设置为
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>
这将在安装GUI中隐藏SupportingFiles功能,也不应安装它。如果您看到不同的行为,请告诉我


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

我不确定这是否有效。当我有机会的时候,我会进行测试。现在只是添加链接

更新:我现在无法对此进行调查。我想提醒您在安装过程中可能会向数据库中添加临时行。也许这就是“以交互方式”隐藏功能的方法。我只是不知道,因为我从来没有试过。和。没有保证

除此之外,我认为您可以使用外部GUI启动器。我以后可能会对此发表评论


更多参考链接


这是一个非常彻底的答案,但不幸的是,它不起作用。如果我将级别设置为0,用户仍然可以进行自定义安装,并在树中查看该功能,然后选择安装它。我还通过将条件放在由该功能安装的组件内部来缓解这种情况,但这似乎是一种糟糕的用户体验。如果功能级别设置为0,则该功能应完全隐藏在安装中。我不知道你为什么会看到不同的行为。请注意,对于要隐藏的特征,上述示例中的条件必须计算为true。您可以通过将条件设置为
1
来测试特征隐藏,以强制其为真。然后,该功能应在安装GUI中不可见。我相信这将是:
1
。根据文档,并与我看到的情况一致,将级别设置为0只会“禁用”功能。。。有效地将其标记为不部署。用户可以在自定义安装期间在功能树中更改该设置。我需要一种方法来设置功能元素的显示属性为隐藏。。。我想,我只是做了个快速测试。将功能的级别属性设置为
0
会在GUI中隐藏它,并且不会安装它-就我所见。默认情况下,您不应将其设置为0,因为这将使其在管理员安装期间不会被提取,但如果为true,则应使用条件将功能级别设置为0。让我在上面加一个具体的例子,它对我不起作用。我想知道特征条件何时得到评估。我的UI流程为欢迎>EULA>安装范围(ALLUSERS可在此处更改为2,但默认为1)>安装类型>自定义(此处显示功能树)。如果在初始化UI之前对功能条件进行了评估,那么这就解释了为什么它不会为我隐藏,因为我正在对话框中设置它。恐怕今天没有时间看这个了。我不认为在运行时更改
alluser
msinstallperuser
的值以及功能级别的值是好的。您遇到的主要问题是
每用户设置
应该运行
非提升
,而
每台机器
设置需要
提升
。我不确定WiX人员如何在WiX对话框中进行此提升。仅供参考,我必须根据用户界面中选择的“所有用户”或“仅限我”手动更新MSRunningHighted,以使“管理员屏蔽”不会显示在默认验证对话框的安装按钮上。除此之外,我在海拔方面没有任何问题。在静默安装中,在管理命令提示符下运行它可以提供必要的提升。在进行GUI安装时,当我点击install时会出现提升提示。
<Feature Id="SupportingFiles" Title="SupportingFiles" Level="1">
   <Condition Level="0">1</Condition>
</Feature>