Я делаю установщик, который должен настроить веб-сервис, который он устанавливает. Он динамически генерирует свойства, которые содержат данные, собранные от пользователя в последовательности пользовательского интерфейса, устанавливает сервис и устанавливает параметры.
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
Кто-нибудь знает, почему я не могу прочитать значение динамического открытого свойства?
ПРИМЕЧАНИЕ. Отключитесь от этого вопроса.