2015-07-08 5 views
2

У меня есть определить пользовательское действие в моем WXS файл:Как определить CustomAction с длинной командной строкой в ​​WIX?

<CustomAction ExeCommand="long command line" FileKey="xyz.exe" Id="foo"/> 

и я получаю предупреждение:

предупреждения LGHT1076: ICE03: переполнение Строки (больше длин разрешенных в колонке); Таблица: CustomAction, Column: Target, Key (s):

Какое правильное решение для определения действия с длинной командной строкой?

+0

[Это сообщение] (http://stackoverflow.com/questions/10089352/what-is-the-maximum-length-of-a-string) может дать вам представление о том, обходной путь. И вот несколько [подробнее] (http://stackoverflow.com/questions/16460325/ice03-string-overflow-greater-than-length-permitted-in-column-table-customa). –

ответ

2

Назначьте длинную командную строку свойству и затем используйте [СОБСТВЕННОСТЬ] в пользовательском действии. Хотя пользовательские действия EXE в целом не одобряются. Если вы должны это сделать, используйте функцию пользовательского действия WiX Quiet Execute.

+0

Если я хочу установить свойство, я получаю: предупреждение CNDL1077: Свойство содержит «[INSTALLDIR]» в своем значении, которое является незаконной ссылкой на другое свойство. Чтобы установить свойство со значением другого свойства, используйте атрибуты CustomAction с атрибутами Property и Value. * Если я использую CustomAction, то у меня есть оригинальная проблема. – Horcrux7

+1

В этом случае вам необходимо использовать настраиваемое действие SetProperty, запланированное после CostFinalize в последовательности InstallExecute. Тогда ваше использование этого свойства должно быть после этого. –

+0

SetProperty - это shourtcut для CustomAction типа Property. Такой же предел длины. – Horcrux7

4

После многих времен я нашел решение. Я разделил командную строку на несколько свойств.

<CustomAction Id="action.prop0" Property="prop0" Value="first part with [INSTALLDIR]"/> 
<CustomAction Id="action.prop" Property="prop" Value="[prop0] second part"/> 
<CustomAction ExeCommand="[prop]" FileKey="service.exe" Id="myaction"/> 
<InstallExecuteSequence> 
    <Custom Action="action.prop0" After="InstallFiles"/> 
    <Custom Action="action.prop" After="action.prop0"/> 
    <Custom Action="myaction" Before="InstallFinalize"/> 
</InstallExecuteSequence>