Пользовательское действие не выполняется - PullRequest
2 голосов
/ 13 сентября 2011

У меня есть пользовательское действие Я определил для моего установщика.Кажется, что установщик не работает.

Вот строки в файле WXS, которые определяют настраиваемое действие:

    <CustomAction Id="GetConfigProperties" BinaryKey="GetPropertiesDLL" DllEntry="GetPropertiesFromConfigFile" />

    <InstallExecuteSequence>
        <RemoveExistingProducts After="InstallInitialize" />
        <Custom Action="NewerVersionDetected" After="FindRelatedProducts">NEWERVERSIONDETECTED</Custom>
        <Custom Action="GetConfigProperties" After="FindRelatedProducts"></Custom>
        . . .            
    </InstallExecuteSequence>

    <Binary Id="GetPropertiesDLL" SourceFile="$(var.LPRCore Installer CBP Helper.TargetDir)\LPRCore Installer CBP Helper.CA.dll" />

Я проверил MSI с Orca и соответствующие записинаходятся в таблицах MSI.

Вот выдержка из кода в файле CustomActions.cs:

    [CustomAction]
    public static ActionResult GetPropertiesFromConfigFile(Session session) {
        // Output a start message to the install log
        session.Log( "Begin GetPropertiesFromConfigFile" );

        . . .


        return ActionResult.Success;
    }

Есть несколько других операторов session.Log в коде в местах, где яхотел посмотреть, что происходит.

Теперь у меня включено ведение журнала.Когда я просматриваю файл журнала в Блокноте, я не вижу сообщений от моих звонков на session.Log.Я также не вижу ссылок на GetConfigProperties.Похоже, что пользовательское действие вообще не выполняется.Что я сделал не так?

Ответы [ 3 ]

5 голосов
/ 14 сентября 2011

Оказывается, что настраиваемое действие не было запущено, потому что:

  1. Запланировано выполнение в неправильном месте.По моей вине мне нужно было поместить его в секцию InstallUISequence, а не в секцию InstallSequence.

  2. Я прерывал установку до начала действия.

Когда я помещал настраиваемое действие в раздел InstallUISequence и в нужном месте, все работало нормально.

Спасибо за попытку.

Тони

2 голосов
/ 14 сентября 2011

В случае, если вы не видите записей настраиваемого действия GetConfigProperties в файле журнала, скорее всего, причина в том, что элемент InstallExecutesequence находится в отдельном фрагменте, который не включен в пакет. Чтобы включить содержимое фрагмента в пакет, вы должны ссылаться на любой элемент в нем из элемента Product.

Например, вы можете добавить следующую строку в элемент Product:

<CustomActionRef Id="GetConfigProperties" />
0 голосов
/ 14 сентября 2011

Я думаю, что вам не хватает условия, при котором пользовательское действие должно выполняться. Либо задайте какое-либо условие <Custom Action="GetConfigProperties" After="FindRelatedProducts">NOT INSTALLED AND NOT REMOVE</Custom>, либо, если вы хотите установить его по умолчанию, укажите 1 в качестве условия. <Custom Action="GetConfigProperties" After="FindRelatedProducts">1</Custom>

...