WindowsInstaller Отменить установку

Я устанавливаю пакет MSI с Microsoft.Deployment.WindowsInstaller.Installer Возражаю и хочу возможность отменить установку. Насколько я мог узнать, это может быть сделано SetExternalUI метод. Но это не похоже на работу. Обратный вызов вызывается только один раз...

Это мой код:

internal class WinInstallerExecutor : ExecutorAbstract
{
    public override ProcessingResultEnum Run()
    {

        try
        {
            Installer.SetInternalUI(InstallUIOptions.Silent);
            Installer.SetExternalUI(UiHandler, InstallLogModes.Verbose);
            Installer.InstallProduct(@"C:\Path\to\Package, "params");
            return ProcessingResultEnum.ExecutionSuccesful;
        }
        catch (Exception ex)
        {
            return ProcessingResultEnum.ExecutionNotSuccessful;
        }
    }

    private MessageResult UiHandler(InstallMessage messageType, string message, MessageButtons buttons, MessageIcon icon,
        MessageDefaultButton defaultButton)
    {
        return _abort ? MessageResult.Cancel : MessageResult.None;
    }
}

Это правильный подход вообще?

1 ответ

Решение

Понял... Как я узнал здесь, проблема была в фильтре сообщений. С этой строкой:

Installer.SetExternalUI(UiHanlder,
                InstallLogModes.Verbose | InstallLogModes.ActionData | InstallLogModes.ActionStart |
                InstallLogModes.CommonData | InstallLogModes.Error | InstallLogModes.ExtraDebug |
                InstallLogModes.FatalExit | InstallLogModes.FilesInUse | InstallLogModes.Info |
                InstallLogModes.Initialize | InstallLogModes.LogOnlyOnError);

обратный вызов срабатывает намного больше. И если MessageResult.Cancel возвращается из обратного вызова, установка отменяется.

Другие вопросы по тегам