Свойства условия WiX, переданные из командной строки, не работают?

StackOverflow https://stackoverflow.com/questions/858923

Вопрос

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

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

Редактировать:

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

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

Это было полезно?

Решение

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

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

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

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

    <Property Id="INSTALLSTARTMENUSHORTCUT" Secure="yes"/>

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

Другие советы

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

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

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

Если реклама IIRC должна быть установлена ​​на «Да»

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top