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
возвращается из обратного вызова, установка отменяется.