WiX Property Reference Другое свойство - PullRequest
12 голосов
/ 24 августа 2011

Я пытаюсь создать несколько ярлыков для моего приложения, которые передают разные аргументы в командной строке, используя атрибут 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>

но тогда я получаю это предупреждение при прохождении через свечей :

предупреждение 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"/>

и я не получаю предупреждений или ошибок, но проблема в том, что при установке приложения ярлыки не имеют аргументов в целевом поле.

Разве я не делаю то, что должен делать? Есть ли способ сделать то, что я хочу сделать?

1 Ответ

11 голосов
/ 24 августа 2011

Вам не нужны свойства для Program Files или каталога установки вашего продукта.Используйте [#FileId] для ссылки на полный путь к этому файлу.

Кроме того, если вам нужно несколько ярлыков, просто используйте несколько элементов Shortcut с разными атрибутами Arguments.Если вам нужен один из нескольких ярлыков, вы можете иметь несколько Component с Shortcut с и использовать Condition для установки только одного из них.

...