Есть два способа передачи параметров пользовательских действий, один будет работать для немедленного исполнения ЦСА, а другой будет работать для отложенных пользовательских действий.
Немедленное CA (не может быть откат):
Чтобы передать аргументы в немедленном CA вы можете установить свойство с требуемым именем и доступ к нему из сеанса.
В Wix:
<Property Id="MyProp" Value="MyValue" />
В CA:
[CustomAction]
public static ActionResult NameOfMyCA(Session session)
{
string myArg = session["MyProp"];
}
Отложенный CA:
Чтобы передать аргументы отсроченного CA вы должны использовать CustomActionData Property, этой свойство - это единственный доступ, который вы можете получить от отложенного центра сертификации.
В случае WIX, то ДПФ включает в себя класс CustomActionData который является словарь ключ/значение, и вы можете получить доступ к нему с помощью:
В Wix:
<CustomAction Id="MyCustomAction" .../>
<Property Id="MyCustomAction" Value="Arg1=value1;Arg2=value2;Arg3=value3;Arg4=[MyProperty]" />
В CA:
[CustomAction]
public static ActionResult NameOfMyCA(Session session)
{
CustomActionData data = session.CustomActionData;
//Access each argument like this:
string arg1 = data["Arg1"];
string arg2 = data["Arg2"];
string arg3 = data["Arg3"];
}
Немедленное CA + CustomActionData:
Если вы хотите использовать CustomActionData для немедленного CA вы можете сделать что-то вроде этого:
В Wix:
<Property Id="MyCustomAction" Value="Arg1=value1;Arg2=value2;Arg3=value3;Arg4=[MyProperty]" />
В CA:
[CustomAction]
public static ActionResult NameOfMyCA(Session session)
{
CustomActionData data = new CustomActionData(session["MyCustomAction"]);
//Access each argument like this:
string arg1 = data["Arg1"];
string arg2 = data["Arg2"];
string arg3 = data["Arg3"];
string arg4 = session.Format(data["Arg4"]);
}
В случае arg4 после него содержит значение свойства, которое вам нужно будет получить к нему:
string arg4 = session.Format(data["Arg4"]);
К сожалению, это будет работать только в немедленном CA, это означает, что если вы хотите использовать значение этого свойства в отложенном CA вам нужно будет иметь две пользовательских действий:
CA 1, чтобы установить CustomActionData для CA выполняется как незамедлительно. (Не забудьте назвать свойство с тем же именем, определенным для CustomAction.
CA 2 ЦС с определенной логикой, потребляющей CustomActionData.
Я предлагаю вам использовать CustomActionData для всех случаев этот способ проще конвертировать вам CA из Немедленное отсроченных и код легче читать
Ссылки:.
session.Format CustomActionData
Привет, значения не передаются - я получаю null. –
@ user1223457, я обновил ответ, помог ли он? – Yuriy
Благодарю вас, ценности проходят! однако я получаю [TARGETDIR] как строку, а google не помогает - мне нужен путь, а не имя свойства. –