Пакет обрабатывает обновление как на уровне пакета, так и на уровне MSI. Обновление уровня MSI или параллельная установка определяются тем, как написан пакет MSI и какой код обновления он использует. Из того, что я понимаю из вашего вопроса, если у MSI есть новый Major-Release, то вы хотите выполнить параллельную установку, а если нет, то хотите обновить.
- Самое простое решение, о котором я могу подумать, - это изменить код обновления Bundle при выпуске Major-Release. Но, как всегда при параллельной установке, это усложнит ситуацию, и вам придется управлять несколькими пакетами с несколькими кодами обновления.
Например, вы установили MSI 1.0.0.0 с кодом обновления пакета "abc". Когда выйдет новый MSI 1.1.0.0, вы будете использовать тот же пакет с «abc» и выполнить установку. Это приведет к удалению MSI 1.0.0.0 и установке 1.1.0.0.
Когда появится MSI 2.0.0.0, вы измените код обновления пакета "xyz". Это установит новый MSI 2.0.0.0 (при условии, что они изменили код обновления в MSI). Теперь на этом этапе, если у вас есть новый MSI 1.3.0.0, вы должны обязательно изменить код обновления вашего пакета обратно на «abc», прежде чем вы сможете установить 1.3. Надеюсь, вы поняли суть проблемы / сложности, о которой я говорю. Параллельная установка - это всегда проблема, когда вы хотите работать с обновлениями, и если у меня есть выбор, я буду держаться от него подальше.
Теперь еще один вариант, который у вас есть, - обрабатывать несколько выпусков MSI в одном пакете. Если вам известен код обновления нового основного выпуска, вы можете выполнить поиск продукта на основе кода обновления, а затем решить, хотите ли вы удалить существующую версию и установить новую версию или просто обновить существующую версию.
<util:ProductSearch Id="ProductSearch"
UpgradeCode="{ProductC_MSI_UpgradeCode_GUID}"
Variable="ProductInstalled"
Result="state"/>
Вы можете использовать переменную ProductInstalled, чтобы проверить, присутствует ли этот код продукта / обновления, и затем внести соответствующие изменения в ваш комплект.