Wix - доступ к значениям свойств из отложенного настраиваемого действия, созданного динамически в другом ЦС - PullRequest
3 голосов
/ 09 февраля 2012

Я делаю установщик, который должен настроить веб-сервис, который он устанавливает. Он динамически генерирует свойства, которые содержат данные, собранные от пользователя в последовательности пользовательского интерфейса, устанавливает сервис и устанавливает параметры.

SetParams CA использует динамические свойства, сгенерированные в последовательности пользовательского интерфейса. Чтобы получить доступ к данным в отложенном ЦС, я создал немедленный ЦС, который динамически извлекает данные сеанса и помещает их в CustomActionData.

<CustomAction Id='SaveParams' BinaryKey='Setup.CustomAction' DllEntry='SaveParameters' Execute='immediate'  Return='check'/>
<CustomAction Id='SetParams' BinaryKey='Setup.CustomAction' DllEntry='SetParameters' Execute='deferred' Impersonate='no' Return='check' />

<Custom Action='SaveParams' Before='SetParams'><![CDATA[REMOVE <> "ALL"]]></Custom>
  <Custom Action='SetParams' Before='InstallFinalize'><![CDATA[REMOVE <> "ALL"]]></Custom>

Ниже приведена часть метода SaveParameters в пользовательском действии

customActionData.Append(string.Format(CultureInfo.InvariantCulture, "{0}={1};", propertyName, session[propertyName]));

Этот подход работает! При запуске из сеанса администратора cmd [propertyName] возвращает правильное значение, но когда я запускаю изменение установщика из командной строки без повышенных прав cmd, я не могу получить доступ к значениям свойств в ближайшем CA - сеанс [propertyName] возвращает пустую строку? *

Я могу получить доступ к (статическому) свойству, определенному в файле wxs

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

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

session[property] = "VALUE"; //eq. property = DATABASENAME

Кто-нибудь знает, почему я не могу прочитать значение динамического открытого свойства?

ПРИМЕЧАНИЕ. Отключитесь от этого вопроса.

1 Ответ

1 голос
/ 10 февраля 2012

Существует два варианта решения этой проблемы.1. Немедленное действие, которое считывает свойства, которые необходимо переместить из последовательности выполнения в последовательность UI. 2. Действия на этапе выполнения могут получить доступ к данным из защищенных свойств, как указано в вопросе.Если свойства создаются динамически в ЦС, их необходимо добавить в системное свойство SecureCustomProperties.Символ разделителя равен ';'.

...