У меня есть следующий код в моем WiX инсталлятор:Wix SetProperty если свойство не имеет значения
<Property Id="CONFIGPATH" />
<SetProperty Id="CONFIGPATH" After="AppSearch" Value="[INSTALLFOLDER]servers.cfg">NOT CONFIGPATH</SetProperty>
Намерение состоит в том, что пользователь может передать пользовательские CONFIGPATH
к установщику. Если они не передают собственный путь, используется путь по умолчанию, предназначенный для установки папки установки. Однако этот код не работает. SetProperty
никогда не срабатывает.
Если вместо этого я пишу:
<Property Id="CONFIGPATH" />
<SetProperty Id="CONFIGPATH" After="AppSearch" Value="[INSTALLFOLDER]servers.cfg"></SetProperty>
Свойство обновляется до (расчетной стоимости) [INSTALLFOLDER]servers.cfg
правильно.
Почему это может быть?
Причина объясняется в записке для RemoveFolderEx (http://wixtoolset.org/documentation/manual/v3/xsd/util/removefolderex .html). «MSI не создает свойства для иерархии Directory в вашем пакете до тех пор, пока не будет включен в действие CostFinalize». Итак, если вы попытаетесь установить свойство до CostFinalize (AppSearch до этого), то INSTALLFOLDER фактически не имеет значения. Не совсем уверен, почему он обновляется до '[INSTALLFOLDER] servers.cfg', а не только' servers.cfg' –
@BrianSutherland Чтобы уточнить, когда установлено значение 'After =" AppSearch ", свойство обновляется до вычисленного значения' [ INSTALLFOLDER] servers.cfg', что-то вроде 'c:/install/servers.cfg'. Просто «SetProperty» не срабатывает, когда присутствует условие «NOT CONFIGPATH». Это удивительно, если вы написали. Возможно, даже несмотря на то, что свойство задано до того, как существует иерархия каталогов, маркер '[INSTALLFOLDER] теперь разрешен к его значению? – Oliver