Я обнаружил проблему: обновление работает, только если вы добавляете файлы во время обновления, а не если вы удаляете файлы.
Я сравнил старую установку с новой, и 6 новых файлов отсутствовали в новой. , Из-за этого обновление вообще не обновляло никаких файлов.
Статья, которая вдохновила меня, может быть найдена здесь: Правила установщика MSI
Я понял, что сломался Правило 2. Только добавляйте, никогда не удаляйте ресурсы из компонента
Это как-то странно, что если я захочу удалить файлы во время обновления? Какие решения у меня есть?
ОБНОВЛЕНИЕ: Я обнаружил, что MajorUpgrade можно принудительно ввести в код, как показано ниже:
var project = new ManagedProject
{
Name = "Your name",
Description = "Your description",
GUID = Guid.Parse("{94682162-F133-40A3-92BB-0AF08142474C}"),
MajorUpgrade = new MajorUpgrade
{
DowngradeErrorMessage = $"A later version of {projectName} is already installed. Setup will now exit."
},
Actions = new WixSharp.Action[]
{
new ElevatedManagedAction(CustomActions.UninstallService, Return.check, When.After, Step.InstallInitialize, Condition.Always),
new ElevatedManagedAction(CustomActions.InstallService, Return.check, When.After, Step.InstallExecute, Condition.Always),
}
};
и вам не нужно менять основную часть в сборочная версия. Например, если в существующем установщике была установлена версия 1.1.0.0, вы можете принудительно выполнить обновление в коде, но измените версию на 1.2.0.0 вместо изменения на 2.0.0.0.
Кроме того, в установщике Пакетный проект мне пришлось добавить это свойство: EnableFeatureSelection = "yes" для каждого элемента MSIPackage. Это свойство позволяет вам перехватить событие с именем: DetectRelatedMsiPackage. Это поможет вам различать версии и определить, какой пакет установлен или нет, а также какой можно обновить.