2011-08-24 20 views
12

Estoy intentando crear accesos directos múltiples a mi aplicación que pasan argumentos diferentes en la línea de comandos mediante el uso del atributo Arguments del elemento Shortcut. Quiero poder hacer referencia a una propiedad existente de otra propiedad en mi archivo WiX.Propiedad de WiX Referencia Otra propiedad

Quiero ser capaz de crear un acceso directo por referencia a la propiedad a través de 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> 

He intentado algo equivalente a:

<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> 

pero cuando me siento esta advertencia al pasar a través de candle.exe:

warni ng CNDL1077: La propiedad 'MY_APP_DIR' contiene '[PROGRAM_FILES]' en su valor, que es una referencia ilegal a otra propiedad. Si este valor es un literal de cadena, no una referencia de propiedad , ignore esta advertencia. Para establecer una propiedad con el valor de otra propiedad, use los atributos CustomAction with Property y Value .

Por lo tanto, en base a la sugerencia en la advertencia que me pasa a algo equivalente a:

<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"/> 

y me da ninguna advertencia o errores, pero el problema es que cuando instalo la aplicación de los métodos abreviados de don No tiene los argumentos en el campo de destino.

¿No estoy haciendo algo que debería estar haciendo? ¿Hay alguna manera de hacer lo que quiero hacer?

Respuesta

11

No necesita propiedades para archivos de programa o el directorio de instalación de su producto. Use [#FileId] para referirse a la ruta completa de ese archivo.

Además, si desea utilizar varios accesos directos, solo tiene varios elementos Shortcut con diferentes atributos Arguments. Si desea uno de varios accesos directos, puede tener múltiples Component s con Shortcut sy utilizar Condition para instalar solo uno de ellos.

+0

No sabía acerca de la sintaxis '[#FileId]'. Gracias. El único problema es un ** aviso de LGHT1076: ICE69 ** cuando se pasa a través de _light.exe_. Por lo tanto, funciona, pero no se recomienda ya que estoy usando la referencia de archivo en diferentes 'Component's. –

+3

Una advertencia ICE69 * es correcta si siempre se asegura de que los componentes estén en la misma función. Las advertencias de ICE casi siempre significan "oye, esto es algo que debes mirar para asegurarte de que es lo que querías decir", no es que algo se recomiende o no. –

Cuestiones relacionadas