Wix - проблема обновления приложения управляемого загрузчика - PullRequest
0 голосов
/ 26 сентября 2018

Я решил задать свой вопрос здесь, потому что я не могу найти ответ ни в каком другом месте.Моя задача - подготовить процесс обновления с помощью управляемого интерфейса начальной загрузки, но он не хочет работать должным образом.Я подготовил все необходимые пакеты MSI.Я имею в виду, что я добавил Product Id = "*", я добавил тег MajorUpgrade и настроил его, и я изменяю версии между пакетами (для целей тестирования), я также добавил несколько свойств, которые должны помочь мне различать, является ли это установкой, удалением или обновлениемprocess.

И моя проблема начинается здесь, потому что, когда я использовал пользовательский интерфейс записи по умолчанию, он работал правильно, я имею в виду, что во время установки свойство _INSTALL было установлено равным 1, во время обновления (установка версии 2 пакета) свойство _UPGRADE было установлено равным2 и то же самое с удалением, но теперь, когда я добавил пользовательский интерфейс, свойство UPGRADE вообще не устанавливается.Вместо этого во время пробного запуска UPGRADE сначала запускается процесс установки, и он переходит в какой-то момент, а затем появляется новое окно с Uninstallation.

Мой вопрос: можно ли как-то заставить свой пользовательский интерфейс вести себя как пользовательский интерфейс по умолчанию для записи?

1 Ответ

0 голосов
/ 27 сентября 2018

Спасибо всем за комментарии.Вдохновленный Как выполнить обновление Wix с помощью пользовательского загрузчика Я понял, что не справился с ситуацией, когда установщик работает тихо.

Поэтому я подготовил другой класс для SilentUninstall и сделал это в своем классе Bootstrapper:

public class BootstrapperApp : BootstrapperApplication
{
    public static Dispatcher Dispatcher { get; set; }

    protected override void Run()
    {
        Dispatcher = Dispatcher.CurrentDispatcher;

        var model = new BootstrapperApplicationModel(this);
        var command = model.BootstrapperApplication.Command;
        if (command.Action == LaunchAction.Uninstall && (command.Display == Display.None || command.Display == Display.Embedded))
        {
            model.LogMessage("Starting silent uninstaller.");
            var viewModel = new SilentUninstallViewModel(model, Engine);
            Engine.Detect();
        }
        else
        {
            model.LogMessage("Starting installer.");
            var viewModel = new InstallViewModel(model);
            var view = new InstallView(viewModel);

            view.Closed += (sender, e) => Dispatcher.InvokeShutdown();

            model.SetWindowHandle(view);

            Engine.Detect();
            view.Show();
        }
        Dispatcher.Run();
        Engine.Quit(model.FinalResult);
    }}

и мой класс SilentUninstaller:

public class SilentUninstallViewModel
{
    private BootstrapperApplicationModel model;
    private Engine engine;

    public SilentUninstallViewModel(BootstrapperApplicationModel model, Engine engine)
    {
        this.model = model;
        this.engine = engine;
        WireUpEventHandlers();
    }

    private void WireUpEventHandlers()
    {
        this.model.BootstrapperApplication.PlanComplete += PlanCompleted;
        this.model.BootstrapperApplication.DetectComplete += DetectCompleted;
        this.model.BootstrapperApplication.ApplyComplete += ApplyCompleted;
    }

    private void DetectCompleted(object sender, DetectCompleteEventArgs e)
    {
        this.model.LogMessage("Detecting has been completed for silent uninstallation.");
        this.model.PlanAction(LaunchAction.Uninstall);
    }

    private void ApplyCompleted(object sender, ApplyCompleteEventArgs e)
    {
        this.model.LogMessage("Applying has been completed for silent uninstallation.");
        this.model.FinalResult = e.Status;
        this.engine.Quit(this.model.FinalResult);
    }

    private void PlanCompleted(object sender, PlanCompleteEventArgs e)
    {
        this.model.LogMessage("Planning has been started for silent uninstallation.");
        model.ApplyAction();
    }
}

и, похоже, работает правильно.Четное свойство _UPGRADE возникает в частности MSIs;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...