Как передать параметры пользовательскому действию?

Я пытаюсь создать настраиваемое действие с атрибутом «Значение», я хочу передать параметры в код C # (TARGETDIR и версию).

Однако я получаю сообщение о том, что DLLENtry и Value не могут сосуществовать. Но пользовательское действие без dllentry недействительно.

Это код:

 

И для этого я получаю эту ошибку:

Ошибка 9 ICE68: Недействительный тип настраиваемого действия для действия «SetMAWPrefferences».

Есть идеи, как это сделать?

Обратите внимание: вы используете атрибут Value не так:

… этот атрибут должен использоваться с атрибутом Property для установки свойства … Источник


На основе создания специальных действий WiX в статье C # и Passing Parameters вы должны:

  1. Создание свойств с требуемыми значениями:

       
  2. Создайте собственное действие, чтобы установить свойство InstallDir :

      
  3. Создайте настраиваемые действия:

      
  4. Планирование пользовательских действий для выполнения во время процесса установки:

        ...  
  5. Получите доступ к этим свойствам из своего пользовательского действия следующим образом:

     [CustomAction] public static ActionResult YourCustomAction(Session session) { // session["InstallDir"] // session["Version"] } 

Есть два способа передать параметры пользовательским действиям, один будет работать для ЦС немедленного выполнения, а другой будет работать для отложенных пользовательских действий.

Немедленный CA (нельзя откат):

Чтобы передать аргументы ближайшему СА, вы можете установить свойство с требуемым именем и получить доступ к нему из сеанса.

В Wix:

  

В ЦА:

 [CustomAction] public static ActionResult NameOfMyCA(Session session) { string myArg = session["MyProp"]; } 

Отложенный CA:

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

В случае WIX DTF включает class CustomActionData, который является ключом / значением словаря, и вы можете получить к нему доступ, используя:

В Wix:

   

В ЦА:

 [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:

  

В ЦА:

 [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 1, чтобы установить CustomActionData для CA, выполненного как немедленное. (Не забудьте назвать свойство с тем же именем, которое определено для вашего CustomAction.

  • CA 2 CA с конкретной логикой, которая потребляет CustomActionData.

Я предлагаю вам использовать CustomActionData для всех случаев, таким образом проще конвертировать CA из Immediate в Deferred, и код легче читать.

Рекомендации:

session.Format CustomActionData

  • Какой метод вы используете для развертывания приложений ASP.Net в дикой природе?
  • можно ли создать многоязычный установщик с помощью WIX?
  • Как передать CustomActionData в CustomAction с помощью WiX?
  • Изменить GUID моего компонента в wix?
  • Wix для установки нескольких приложений
  • System.UnauthorizedAccessException при запуске .exe под программными файлами
  • Как реализовать обновление установщика WiX?
  • Какой установочный продукт использовать? InstallShield, WiX, Wise, Advanced Installer и т. Д.
  • «Автоматический» и «Автоматический (Задержка запуска)»
  • Как найти код обновления для установленного файла MSI?
  • Установщик Windows и создание WiX
  • Давайте будем гением компьютера.