从命令行传递的 WiX 条件属性不起作用?
-
21-08-2019 - |
题
我有一个属性用于确定是否安装需要通过命令行参数传递的快捷方式。当我在 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 属性来执行每用户或每台计算机的注册表,因此传入属性应该是可能的,但我不确定什么我做错了。
解决方案
因为这里有两个问题,所以有两件事:
- 公布的快捷方式必须位于安装它们指向的文件的同一组件中。这是必需的,因为 Windows Installer 将公告的快捷方式指向组件的 KeyPath。因此,如果您希望选择性安装广告快捷方式,则不能使用它们。
我有一个 关于如何创建快捷方式并通过验证的博客文章.
您正在使用的属性需要标记为安全才能从安装 UI 进程传递到服务器端。要做到这一点,只需做
<属性 ID="INSTALLSTARTMENUSHORTCUT" 安全="是"/>
请注意,我没有添加 Value 属性。如果您指定一个值,即使它是 0,那么您的 INSTALLSTARTMENUSHORCUT 将计算为 TRUE。空白/未定义的属性为 FALSE,任何其他值均为 TRUE。
其他提示
你试过标记属性安全?
<Property Id="INSTALLSTARTMENUSHORTCUT" Value="0" Secure="Yes" />
看为快捷方式表文档一个“我不认为你可以有条件地标榜的快捷方式。我们解决这个问题通过安装一个播发的开始菜单快捷方式,和常规桌面快捷方式。
如果IIRC广告已下注设定在是
您已经看到MindCapers 这里这个例子中,我曾与Shorcuts麻烦,直到我创建的注册表项。