WiX属性参考另一个属性

时间:2011-08-24 17:17:22

标签: reference wix properties

我正在尝试为我的应用程序创建多个快捷方式,这些快捷方式使用Shortcut元素的Arguments属性在命令行上传递不同的参数。我希望能够在 WiX 文件中引用其他媒体资源中的现有媒体资源。

我希望能够通过以下方式引用ARGUMENTS属性来创建快捷方式:

<Component Id="MyAppProgramMenuShortcut" Guid="MY-GUID-HERE">
    <RegistryValue Root="HKCU"
        Key="Software\[Manufacturer]\[ProductName]\MyAppShortcut" Type="string"
        Value="" KeyPath="yes" />
    <Shortcut Id="ProgramMenuShortcutMyApp" Directory="ProgramMenuDir"
        Name="MyApp" Target="[SHORTCUT_TARGET]"
        Arguments="-jar myApp.jar [ARGUMENTS]" WorkingDirectory="INSTALLDIR"
        Icon="logo.ico" />
</Component>

我尝试过相当于:

的东西
<Property Id="PROGRAM_FILES">C:\Program Files</Property>
<Property Id="MY_APP_DIR">[PROGRAM_FILES]\MyApp</Property>
<Property Id="ARGUMENTS">[MY_APP_DIR]\fileA.xml [MY_APP_DIR]\fileB.xml</Property>

但是当我通过 candle.exe

传递时会收到此警告
  

警告CNDL1077:'MY_APP_DIR'属性包含   '[PROGRAM_FILES]'的值是非法引用的   另一个财产。如果此值是字符串文字,而不是属性   参考,请忽略此警告。用。设置属性   另一个属性的值,使用带有Property和Value的CustomAction   属性。

所以,根据警告中的建议,我改为等同于:

<CustomAction Id="PROGRAM_FILES" Property="PROGRAM_FILES" Value="C:\Program Files"/>
<CustomAction Id="MY_APP_DIR" Property="MY_APP_DIR" Value="[PROGRAM_FILES]\MyApp"/>
<CustomAction Id="ARGUMENTS" Property="ARGUMENTS" Value="[MY_APP_DIR]\fileA.xml [MY_APP_DIR]\fileB.xml"/>

我没有收到任何警告或错误,但问题是当我安装应用程序时,快捷方式在目标字段中没有参数。

我不做我应该做的事情吗?有办法做我想做的事吗?

1 个答案:

答案 0 :(得分:11)

您不需要Program Files或产品的安装目录的属性。使用[#FileId]来引用该文件的完整路径。

此外,如果您需要多个快捷方式,则只需拥有多个Shortcut元素,这些元素具有不同的Arguments属性。如果您需要多个快捷方式之一,则可以使用Component个多个Shortcut并使用Condition仅安装其中一个。