WiX属性参考另一个属性

问题描述:

我试图通过使用Shortcut元素的Arguments属性为我的应用程序创建多个快捷方式,这些快捷方式在命令行上传递不同的参数。我希望能够从我的WiX文件中的其他资产中引用现有资产。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

warni ng CNDL1077:'MY_APP_DIR'属性包含 '[PROGRAM_FILES]'的值,该值是对另一个属性 的非法引用。如果此值是字符串文本,而不是属性 参考,请忽略此警告。要使用另一个属性的值 设置属性,请使用具有属性和值 属性的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"/> 

和我没有得到任何警告或错误,但问题是,当我安装应用程序的快捷方式别在目标领域没有争论。

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

您不需要Program Files或产品安装目录的属性。使用[#FileId]来引用该文件的完整路径。另外,如果您需要多个快捷方式,只需具有多个Shortcut元素,其中具有不同的Arguments属性。如果您需要几个快捷方式之一,则可以使用多个ComponentShortcut s,并使用Condition仅安装其中的一个。

+0

我不知道'[#FileId]'语法。谢谢。唯一的问题是通过_light.exe_传递**警告LGHT1076:ICE69 **。所以,它可以工作,但不推荐使用,因为我在不同的'Component'中使用了文件引用。 –

+3

如果始终确保组件处于相同功能中,则ICE69 *警告即可。 ICE的警告几乎总是意味着“嘿,这是你应该看看,以确保它是你的意思,”不是什么或不推荐。 –