Свойства условия WiX, переданные из командной строки, не работают? - PullRequest
4 голосов
/ 13 мая 2009

У меня есть свойство устанавливать ли ярлыки, которые нужно передавать через аргументы командной строки. Кажется, что условия работают, когда я устанавливаю свойства в файле wxs, но они, похоже, игнорируются при установке их через командную строку. Из журнала я вижу, что они устанавливаются:

MSI (s) (24:C8) [11:01:32:234]: PROPERTY CHANGE: Modifying INSTALLSTARTUPSHORTCUT property. Its current value is '0'. Its new value: '1'.
MSI (s) (24:C8) [11:01:32:234]: PROPERTY CHANGE: Modifying INSTALLSTARTMENUSHORTCUT property. Its current value is '0'. Its new value: '1'.
MSI (s) (24:C8) [11:01:32:234]: PROPERTY CHANGE: Modifying INSTALLDESKTOPSHORTCUT property. Its current value is '0'. Its new value: '1'.

Однако эти ярлыки не устанавливаются.

Кроме того, похоже, что поскольку они должны быть в своем собственном компоненте, чтобы иметь возможность устанавливать для них условия, они больше не могут быть объявлены как ярлыки. Как бы вы получили условно установленные рекламируемые ярлыки?

Текущий код быстрого доступа:

<Property Id="INSTALLSTARTMENUSHORTCUT" Value="0"/>
...
<Component Id="StartMenuShortcut" Guid="MY-GUID">
  <Condition>INSTALLSTARTMENUSHORTCUT</Condition>
  <Shortcut Id="StartMenuServerShortcut"
    Directory="ProgramMenuDir"
    Name="Application Name" WorkingDirectory="INSTALLDIR" Advertise="no"
    Target="[!FileEXE]"
    Icon="Icon.ico" />
</Component>

И повторяется для других ярлыков

Edit:

Пробуйте то, что предложил Саша, и добавляете следующее:

<Property Id="INSTALLSTARTUPSHORTCUT" Value="0" Secure="yes"/>
<Property Id="INSTALLDESKTOPSHORTCUT" Value="0" Secure="yes"/>
<Property Id="INSTALLSTARTMENUSHORTCUT" Value="0" Secure="yes"/>

Теперь он устанавливает все ярлыки, даже если они установлены в 0 как в xml, так и в командной строке. Командная строка, которую я передаю:

msiexec /i MySetup.msi INSTALLSTARTUPSHORTCUT=0 INSTALLDESKTOPSHORTCUT=0 INSTALLSTARTMENUSHORTCUT=0 /l*v inst.log /qb

попытался поместить значения в кавычки, но все равно не пошел. Здесь не показано, но мне удалось манипулировать свойством ALLUSERS для выполнения реестров для каждого пользователя или компьютера, выполнив ALLUSERS = "" или ALLUSERS = "2". Поэтому передача свойств должна быть возможной, но я не уверен Я делаю неправильно.

Ответы [ 3 ]

10 голосов
/ 20 мая 2009

Две вещи, поскольку здесь есть два вопроса:

  1. Рекламируемые ярлыки должны быть в том же компоненте, который устанавливает файл, на который они указывают. Это необходимо, потому что установщик Windows указывает рекламируемое сокращение на KeyPath компонента. Таким образом, вы не можете использовать объявленные Shorcuts, если хотите, чтобы они были установлены дополнительно.

У меня есть сообщение в блоге о том, как создать ярлык и пройти проверку .

  1. Используемые вами свойства должны быть помечены как защищенные для перехода от процесса установки пользовательского интерфейса к стороне сервера. Для этого просто сделайте

Обратите внимание, что я не добавил атрибут Value. Если вы укажете значение, даже если оно равно 0, ваш INSTALLSTARTMENUSHORCUT будет иметь значение TRUE. Пустое / неопределенное свойство - FALSE, любое другое значение - TRUE.

2 голосов
/ 14 мая 2009

Вы пытались пометить свойства как безопасные?

<Property Id="INSTALLSTARTMENUSHORTCUT" Value="0" Secure="Yes" />

Просмотр документации для таблицы ярлыков Не думаю, что вы можете получить условно объявленные ярлыки. Мы можем обойти это, установив ярлык объявленного меню «Пуск» и обычный ярлык на рабочем столе.

0 голосов
/ 13 мая 2009

Если IIRC Advertise должно делать ставки, установите Да

Вы видели этот пример из MindCapers здесь , у меня были проблемы с Shorcuts, пока я не создал запись реестра.

...