【问题标题】:WiX Property Reference Another PropertyWiX 属性引用另一个属性
【发布时间】:2011-08-25 02:14:02
【问题描述】:

我正在尝试使用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]' 的值是非法引用 另一个财产。如果此值是字符串文字,而不是属性 参考,请忽略此警告。使用 另一个属性的值,使用带有属性和值的 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"/>

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

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

【问题讨论】:

    标签: reference wix properties


    【解决方案1】:

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

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

    【讨论】:

    • 我不知道[#FileId] 语法。谢谢。唯一的问题是通过 light.exe 时出现警告 LGHT1076 : ICE69。所以,它可以工作,但不推荐,因为我在不同的Components 中使用文件引用。
    • 如果您始终确保组件具有相同的功能,则 ICE69 警告 是可以的。 ICE 警告几乎总是意味着“嘿,这是你应该看的东西,以确保它是你的意思”,而不是推荐或不推荐的东西。
    猜你喜欢
    • 1970-01-01
    • 2013-02-11
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 2020-07-16
    • 2015-11-19
    • 1970-01-01
    • 2017-01-29
    相关资源
    最近更新 更多