3

カスタムアクションでは、次の関数をオーバーライドし、ロールバックの場合に例外を取得しました...

"savedState ディクショナリに予期された値が含まれておらず、破損している可能性があります。"

ロールバックする他の方法はありますか?

   protected override void OnBeforeInstall(System.Collections.IDictionary savedState)
    {            
        try
        {                

            bool report = false; //Some validation
            if (!report)                
                throw new InstallException("License is not valid.");
            base.OnBeforeInstall(savedState);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            base.Rollback(savedState);
        }

    }
4

2 に答える 2

1

例外ハンドラの「base.Rollback()」を「throw;」に変更します。発信者は適切なタイミングで Rollback を呼び出します。

于 2011-02-08T22:29:09.377 に答える
1

pinvoke を使用して、基本インストーラーのキャンセル ボタンを呼び出すことができます。これにより、installexception エラー メッセージ ダイアログが表示されずにロールバックされます。

于 2011-06-20T20:14:52.170 に答える