Есть ли способ установить переменную препроцессора в значение свойства? - PullRequest
8 голосов
/ 29 января 2010

У меня есть включаемый файл WiX со следующим кодом

<Fragment Id="PropertyFragment">
  <Property Id="DynamicLanguageCode" Value="[SystemLanguageID]" />
  <?define productLanguage = [DynamicLanguageCode]?>
</Fragment>

Теперь в моем теге Product в моем скрипте WiX я хотел бы установить для атрибута Language значение productLanguage, поскольку оно принимает только локализуемые целые числа. Есть ли способ, которым я могу получить мою переменную, которой будет присвоено значение свойства?

Спасибо

Ответы [ 2 ]

25 голосов
/ 30 января 2010

Кажется, что вы не понимаете, в чем разница между переменными wix и свойствами установщика Windows.

A wix переменная может указываться как $(var.foo). Такая переменная может быть определена путем передачи -d аргументов командной строки в candle.exe. Это также может быть определено синтаксисом <?define foo="bar"?>. Переменная wix - это концепция, которая существует только при создании вашей установки. Это что-то, что заполняется препроцессором wix, прежде чем что-либо еще происходит, очень похоже на #define операторы в C ++.

A Свойство установщика Windows - это то, что заполняется во время установки. Один из способов определения свойств - поместить их в таблицу Property файла MSI. Это то, что делает элемент свойства wix. Некоторые (но не все) типы данных , используемые в базе данных установщика Windows, позволяют ссылаться на такое свойство с синтаксисом [FOO]. Одним примером типа данных, который поддерживает это, является тип данных Shortcut , используемый атрибутом Target элемента wix Shortcut . Тип данных Language не поддерживает !

2 голосов
/ 06 ноября 2015

Не споря почему, это можно сделать так:

<Property Id="DynamicLanguageCode" Value="$(var.SystemLanguageID)" />
...