Есть ли альтернативный способ доступа к деталям сеанса в отложенных пользовательских действиях?
У меня есть настраиваемое действие и нужно получить ниже значений для копирования некоторых частей из папки установки в папку VS2010
- путь к каталогу VS2010 (
VS2010DEVENV
)
- Путь установки (свойство
INSTALLLOCATION
)
Чтобы предоставить достаточно привилегий, я установил настраиваемое действие как Execute='deferred' Impersonate='no'
. Но при запуске установщика он зарегистрировал сообщение:
Невозможно получить доступ к данным сеанса из немедленного пользовательского действия
Кажется, мы не можем получить доступ к свойству в "отложенном" пользовательском действии (т.е. session["VS2010DEVENV"]
)
Есть ли другой способ, чтобы я мог получить эти значения по мере необходимости?
Ответы
Ответ 1
Это должно быть полезно. Обратите особое внимание на нижнюю часть страницы, руководство по 2 шагам, как передать значения через CustomActionData.
Вот выдержка:
Чтобы записать значение свойства в установку script для использования во время выполнения отложенного выполнения:
- Вставьте небольшое пользовательское действие в последовательность установки, которая задает интересующее свойство для свойства с тем же именем, что и отложенное выполнение пользовательского действия. Например, если первичный ключ для отложенного выполнения пользовательское действие - это "MyAction", задающее свойство с именем "MyAction" на свойство X, которое нужно восстановить. Вы должен установить свойство "MyAction" в последовательности установки перед пользовательское действие "MyAction". Хотя любой тип пользовательских действий может установить контекстные данные, самый простой способ - использовать свойство (например, Custom Action Type 51).
- В момент обработки последовательности установки установщик напишет значение свойства X в исполнение scriptкак значение свойства CustomActionData.
Ответ 2
Дополнительная информация: несколько значений свойств могут быть переданы с использованием следующего синтаксиса в "Custom Action Type 51" (который представляет собой просто настраиваемое действие, которое устанавливает значение свойства):
PROPERTY1=Value1;PROPERTY2=Value2;PROPERTY3=...
Значения могут быть получены из пользовательского действия следующим образом:
string prop1 = session.CustomActionData["PROPERTY1"];
string prop2 = session.CustomActionData["PROPERTY2"];
Вот пример, который устанавливает значения свойств для пользовательского действия с идентификатором "MyCustomAction":
<CustomAction
Id="SetCustomActionPropertyValues"
Property="MyCustomAction"
Value="INSTALLDIR=[INSTALLDIR];EXECUTABLE=[#MyExecutableFile]" />
(прочитайте эту статью MSDN для получения более подробной информации о форматированном синтаксисе, который в этом примере используется для получения места установки файла с идентификатором "MyExecutableFile" )