Использование настраиваемого действия WiX для установки значения свойства - PullRequest
9 голосов
/ 12 сентября 2011

Я изменяю существующий установщик WiX для обновления существующей установки одного из наших продуктов.Есть несколько значений, значения которых по умолчанию указаны в свойствах.Эти свойства отображаются пользователю для редактирования, а затем записываются в пользовательский файл конфигурации существующим установщиком.

Мой код должен быть достаточно умным, чтобы определить, выполняет ли он новую установку по сравнению с установкой более старойверсия.Если он выполняет новую установку, ему нужно установить для свойств значения по умолчанию.Но если выполняется обновление, код должен извлечь значения этих свойств из существующего файла конфигурации и отобразить их пользователю.

Из прочитанного мною чтения мне кажется, что мне нужноиспользовать пользовательское действие type 51 для установки свойств.Но как мне реализовать это настраиваемое действие?

Я думаю, что сначала мне нужно определить настраиваемое действие, чтобы поместить его в таблицу настраиваемых действий, а затем мне нужно прикрепить тег где-нибудь для его вызова.И тогда мне нужно определить это.

Как я могу это сделать?Каким будет пример кода?

Ответы [ 3 ]

4 голосов
/ 13 сентября 2011

После более подробного изучения пользовательских действий, я думаю, я все понял.Я добавил тег в файл .wxs, чтобы определить, где находится настраиваемое действие.Затем я сослался на идентификатор двоичного тега в CustomAction.Наконец, я добавил пользовательский тег в раздел InstallExecuteSequence, который ссылался на тег CustomAction по идентификатору.

Последний упомянутый выше конечный пользовательский тег должен идти в раздел InstallUISequence, а не в раздел InstallExecuteSequence, поскольку пользовательское действие должновызываться до отображения диалогового окна.

Что касается реализации самого пользовательского действия, я добавил в решение новый проект библиотеки пользовательских действий C #.Там я реализовал метод, украшенный атрибутом [CustomAction].Этот метод использует значения свойств, хранящиеся в объекте Session, переданные методу в качестве параметра, и определяет путь к исполняемому файлу текущей версии.Затем он выполняет работу, необходимую для поиска значений в файле конфигурации программы, которые необходимо сохранить в разных версиях, и записывает их в другие свойства для сценария обновления.

2 голосов
/ 05 февраля 2016

Пример:

    [CustomAction]
    public static ActionResult SetProperty(Session session)
    {
        try
        {
            session.Log("Begin SetProperty action");

            session["PROPERTY_NAME"] = "value"


        }
        catch (Exception exception)
        {
            session.Log("ERROR in custom action SetProperty {0}", exception.ToString());

            return ActionResult.Failure;
        }

        return ActionResult.Success;
    }
2 голосов
/ 13 сентября 2011

Прочитайте следующие разделы Учебное пособие по WiX :

  1. Дополнительные действия : обзор того, как добавить настраиваемое действие в MSI;
  2. Чего нет в книге : приведен пример реализации настраиваемого действия в DLL.
...