WiX属性参考另一个属性

E-r*_*ich 12 wix properties reference

我正在尝试为我的应用程序创建多个快捷方式,通过使用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>
Run Code Online (Sandbox Code Playgroud)

我尝试了相当于的东西:

<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>
Run Code Online (Sandbox Code Playgroud)

但是当我通过candle.exe传递时会收到此警告:

警告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"/>
Run Code Online (Sandbox Code Playgroud)

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

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

Bob*_*son 11

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

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

  • 如果始终确保组件具有相同的功能,则ICE69*警告*即可.ICE警告几乎总是意味着"嘿,这是你应该看的东西,以确保它是你的意思,"而不是建议或不推荐. (3认同)