C# WindowsInstaller取消安装
我正在安装带有Microsoft.Deployment.WindowsInstaller.Installer对象的MSI包,希望能够取消安装。据我所知,这可以通过SetExternalUI方法完成。但它似乎不起作用。回调只调用一次 这是我的代码:C# WindowsInstaller取消安装,c#,windows-installer,C#,Windows Installer,我正在安装带有Microsoft.Deployment.WindowsInstaller.Installer对象的MSI包,希望能够取消安装。据我所知,这可以通过SetExternalUI方法完成。但它似乎不起作用。回调只调用一次 这是我的代码: internal class WinInstallerExecutor : ExecutorAbstract { public override ProcessingResultEnum Run() { try
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;
}
}
这是正确的方法吗?明白了。。。
我发现问题出在消息过滤器上。这一行:
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,则安装将取消