2010-11-28 12 views
3

特定の状況下でアプリケーションのセットアッププロジェクトをアンインストールできないようにするには、をオーバーロードしますが、OnBeforeUninstallを使用してセットアッププロジェクトのアンインストールを防止する

protected override void OnBeforeUninstall(IDictionary savedState) 
{ 
    if (ApplicationIsBusy()) 
     throw new ApplicationException("Prevent uninstall while application busy."); 
} 

私はUninstallメソッドをオーバーライドして、アンインストールをキャンセルすることができていますが、その後でセットアッププロジェクトは、すでに自分のアプリケーションを閉じました。アプリケーションがビジー状態のときアンインストールを "失敗"するにはの前に、セットアッププロジェクトが実行中に終了してワーカープロセスを中断させようとしていますか?

+1

トレースのメッセージをhttp://msdn.microsoft.com/en-us/library/system.diagnostics.trace.writeline.aspxに書き込んで、メソッドが呼び出されたかどうかを確認してください。デバッグビューでトレースメッセージを確認することができます。http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx –

+1

MSDNから: "派生クラスでOnBeforeUninstallをオーバーライドする場合は、必ずベースクラスのOnBeforeUninstallメソッドを呼び出してください登録された代理人がイベントを受け取るようにします。 –

答えて

2

カスタムコードを呼び出す前に、登録されたデリゲートがイベントを受け取るようにbase.OnBeforeUninstall(savedState)を呼び出して、カスタムコードをアンインストールする前に実行できるようにします。

protected override void OnBeforeUninstall(IDictionary savedState) 
{ 
    // Add this 
    base.OnBeforeUninstall(savedState); 

    if (ApplicationIsBusy()) 
     throw new ApplicationException("Prevent uninstall while application busy."); 
} 
3

あなたがアンインストールするためのカスタムアクションを選択したセットアッププロジェクトでは、それはおそらくあなたのケースだということを確認してください。