2017-10-25 13 views
0

Microsoft.Deployment.WindowsInstaller.InstallerオブジェクトでMSIパッケージをインストールしていますが、インストールをキャンセルする機能が必要です。私が知る限り、これはSetExternalUIメソッドで行うことができます。しかし、それは動作していないようです。コールバックは...一度呼び出されWindowsInstallerインストールをキャンセルします

これは私のコードです:それは正しいアプローチでは、すべての

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

入手しました... hereを見つけたので、メッセージフィルタが問題でした。この行は次のとおりです。

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がコールバックから返された場合、インストールはキャンセルされます。

関連する問題