Есть ли альтернативный способ доступа к деталям сеанса в отложенном настраиваемом действии? - PullRequest
28 голосов
/ 05 сентября 2011

У меня есть настраиваемое действие, и мне нужно получить значения ниже для копирования некоторых деталей из папки установки в папку VS2010

  1. Путь к каталогу VS2010 (свойство VS2010DEVENV)
  2. Путь установки(INSTALLLOCATION свойство)

Чтобы предоставить достаточные привилегии, я настроил настраиваемое действие как Execute='deferred' Impersonate='no'.Но при запуске установщика он записал сообщение:

Невозможно получить доступ к деталям сеанса из не немедленного пользовательского действия

Кажется, мы не можем получить доступ к свойству в "отложенное "настраиваемое действие (т.е. session["VS2010DEVENV"])

Есть ли другой способ, чтобы я мог получить эти значения при необходимости?

Ответы [ 2 ]

31 голосов
/ 05 сентября 2011

Это должно быть полезно. Обратите особое внимание на нижнюю часть страницы, руководство из 2 шагов, как передать значения через CustomActionData .

Вот выдержка:

Чтобы записать значение свойства в скрипт установки для использования во время отложенного выполнения пользовательское действие:

  1. Вставьте небольшое настраиваемое действие в последовательность установки, которая задает интересующее свойство для свойства с тем же именем, что и пользовательское действие отложенного выполнения. Например, если первичный ключ для отложенного выполнения настраиваемого действия «MyAction» установите свойство с именем «MyAction» для свойства X, которое вам нужно получить. Вы необходимо установить свойство «MyAction» в последовательности установки до настраиваемое действие «MyAction». Хотя любой тип пользовательского действия может установить контекстные данные, самый простой способ - использовать свойство присвоение настраиваемого действия (например, настраиваемое действие типа 51).
  2. Во время обработки последовательности установки установщик запишет значение свойства X в сценарий выполнения. в качестве значения свойства CustomActionData.
13 голосов
/ 19 мая 2014

Дополнительные сведения: несколько значений свойств могут быть переданы с использованием следующего синтаксиса в «Типе пользовательского действия 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»)

...