2011-08-24 256 views
12

我試圖通過使用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"/> 

和我沒有得到任何警告或錯誤,但問題是,當我安裝應用程序的快捷方式別在目標領域沒有爭論。

我不是在做我應該做的事嗎?有沒有辦法做我想做的事情?

回答

11

您不需要Program Files或產品安裝目錄的屬性。使用[#FileId]來引用該文件的完整路徑。另外,如果您需要多個快捷方式,只需具有多個Shortcut元素,其中具有不同的Arguments屬性。如果您需要幾個快捷方式之一,則可以使用多個ComponentShortcut s,並使用Condition僅安裝其中的一個。

+0

我不知道'[#FileId]'語法。謝謝。唯一的問題是通過_light.exe_傳遞**警告LGHT1076:ICE69 **。所以,它可以工作,但不推薦使用,因爲我在不同的'Component'中使用了文件引用。 –

+3

如果始終確保組件處於相同功能中,則ICE69 *警告即可。 ICE的警告幾乎總是意味着「嘿,這是你應該看看,以確保它是你的意思,」不是什麼或不推薦。 –