Пользовательский загрузчик WiX: предотвращение удаления существующего MSI во время обновления - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть собственный загрузчик WiX, который упаковывает пару MSI вместе с несколькими предварительными условиями. Давайте назовем MSI как A и B. Оба обновляются во время Major / Minor upgrade. Однако в связи с новым требованием я хочу ограничить обновление MSI A для определенной ОС c (пример Windows 7). Вот мой пример использования:

  1. На ОС Windows 7 продукт установлен и работает. Оба MSI A и B вместе с предварительными условиями установлены. Все в порядке. В настоящее время версия 1.0.

  2. Затем я обновил и создал новую версию загрузчика - включая MSI A и B (с тем же кодом продукта) для создания установщика версии 2.0.

  3. Теперь, когда это установлено на машине Windows 7, я хочу ограничить обновление MSI A. Вот что я пробовал:

в случае : 'PlanPackageBeginEventArgs'

            if (e.PackageId.Equals("MSI A"))
            {
                e.State = RequestState.None;                    
            }

Я пробовал один и тот же лог c при различных других событиях, таких как, DetectMsiFeature, DetectPackageComplete, ExecutePackageBeginEventArgs, DetectRelatedMsiPackageEventArgs: может быть неуверен, какой из них может работать.

Однако при копании в журналах записи я вижу каждый раз, когда обнаружение для «MSI A» во время запуска обновления устанавливается следующим образом:

Detected package: MSI A, feature: MSI A Feature, state: Absent 

и при более поздняя стадия журнала:

Planned package: MSI A, state: Absent, default requested: Absent, ba requested: None, execute: None, rollback: None, cache: No, uncache: No, dependency: None

Что происходит, несмотря на то, что я могу предотвратить новую установку MSI A (чего было проще добиться с помощью свойства Install Condition из MSI, установленного на проверку версии NT для Windows 7), проблема в том, что существующая (более низкая версия) MSI A удаляется во время обновления.

В результате, когда установка версии 2.0 моего загрузчика завершается, у меня не остается никаких следов MSI A. В то время как я вижу, как все другие компоненты обновляются до новой версии. Я хочу помешать MSI A к более старой версии.

Есть ли элегантный способ справиться с этим? Что оставляет v1.0 MSI A, но обновляет все остальное (например, MSI B) до версии 2.0. Любая помощь или понимание будут оценены.

...