【问题标题】:WiX condition properties passed from command line don't work?从命令行传递的 WiX 条件属性不起作用?
【发布时间】:2010-10-25 22:15:15
【问题描述】:

我有一个属性来决定是否安装需要通过命令行参数传递的快捷方式。当我在 wxs 文件中设置属性时,这些条件似乎有效,但在通过命令行设置它们时,它们似乎被忽略了。从日志中我看到它们正在被设置:

MSI (s) (24:C8) [11:01:32:234]: PROPERTY CHANGE: Modifying INSTALLSTARTUPSHORTCUT property. Its current value is '0'. Its new value: '1'.
MSI (s) (24:C8) [11:01:32:234]: PROPERTY CHANGE: Modifying INSTALLSTARTMENUSHORTCUT property. Its current value is '0'. Its new value: '1'.
MSI (s) (24:C8) [11:01:32:234]: PROPERTY CHANGE: Modifying INSTALLDESKTOPSHORTCUT property. Its current value is '0'. Its new value: '1'.

但是,他们没有安装快捷方式。

此外,似乎由于它们需要在自己的组件中才能对其设置条件,因此它们不能再被宣传为快捷方式。您将如何获得有条件安装的广告快捷方式?

当前快捷方式代码:

<Property Id="INSTALLSTARTMENUSHORTCUT" Value="0"/>
...
<Component Id="StartMenuShortcut" Guid="MY-GUID">
  <Condition>INSTALLSTARTMENUSHORTCUT</Condition>
  <Shortcut Id="StartMenuServerShortcut"
    Directory="ProgramMenuDir"
    Name="Application Name" WorkingDirectory="INSTALLDIR" Advertise="no"
    Target="[!FileEXE]"
    Icon="Icon.ico" />
</Component>

并为其他快捷方式重复

编辑:

尝试 Sacha 的建议并添加以下内容:

<Property Id="INSTALLSTARTUPSHORTCUT" Value="0" Secure="yes"/>
<Property Id="INSTALLDESKTOPSHORTCUT" Value="0" Secure="yes"/>
<Property Id="INSTALLSTARTMENUSHORTCUT" Value="0" Secure="yes"/>

现在它会安装所有快捷方式,即使它们在 xml 和命令行中都设置为 0。我传递的命令行是:

msiexec /i MySetup.msi INSTALLSTARTUPSHORTCUT=0 INSTALLDESKTOPSHORTCUT=0 INSTALLSTARTMENUSHORTCUT=0 /l*v inst.log /qb

尝试将值放在引号中,但仍然不行。此处未显示,但我通过执行 ALLUSERS="" 或 ALLUSERS="2" 成功操作 ALLUSERS 属性以执行每个用户或每台机器的注册表所以应该可以传递属性,但我不确定是什么我做错了。

【问题讨论】:

    标签: installation wix conditional wix3 shortcuts


    【解决方案1】:

    如果 IIRC Advertise 必须下注设置为是

    您已经从 MindCapers here 看到了这个示例,我在创建注册表项之前遇到了快捷方式的问题。

    【讨论】:

    • 如果 Advertised="yes" 与它链接的文件不在同一个组件中,我无法设置它。如果它在同一个组件中,我不能只向快捷方式而不是整个组件添加条件
    【解决方案2】:

    您是否尝试将属性标记为安全?

    <Property Id="INSTALLSTARTMENUSHORTCUT" Value="0" Secure="Yes" />
    

    查看Shortcut Table 的文档我认为您无法获得有条件的广告快捷方式。我们通过安装广告开始菜单快捷方式和常规桌面快捷方式来解决此问题。

    【讨论】:

    • 刚刚尝试过,似乎没有这样做。奇怪的是,当我添加 Secure="Yes" 时,所有快捷方式都安装了,即使它们在 WiX 文件中设置为 Value="0"
    【解决方案3】:

    两件事,因为这里有两个问题:

    1. 广告快捷方式必须位于安装它们指向的文件的同一组件中。这是必需的,因为 Windows 安装程序将广告的快捷方式指向组件的 KeyPath。因此,如果您希望选择性安装广告的快捷方式,则不能使用它们。

    我有一个blog post about how to create a shorcut and pass validation

    1. 您使用的属性需要标记为安全才能从安装 UI 过程传递到服务器端。要做到这一点,只需这样做

    请注意,我没有添加 Value 属性。如果您指定一个值,即使它是 0,那么您的 INSTALLSTARTMENUSHORCUT 将评估为 TRUE。空白/未定义属性为 FALSE,任何其他值为 TRUE。

    【讨论】:

    • 谢谢罗伯。如果您将 0 直接放在条件属性中,它的计算结果为 false,但在属性中它的计算结果为 true,这似乎是不一致的。
    • 我不制定规则,我只是按照它们生活。
    • 如果您想默认为“是”,请使用此处描述的条件 firegiant.com/wix/tutorial/com-expression-syntax-miscellanea/… 而不仅仅是评估是否设置了属性
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    • 1970-01-01
    • 2021-09-12
    • 2020-12-15
    • 2013-07-17
    • 2011-06-04
    • 2011-11-29
    相关资源
    最近更新 更多