2011-08-30 12 views
4

私は、Windows Installer経由で信頼されたルート証明書に証明書を追加/削除するカスタムアクションを持っています。 CustomActionVS2010 Windows Installerでカスタムアクションを取り消してロールバックするにはどうすればよいですか?

ユーザーがTrustedRootsに証明書を追加する権限を持っていないか、「キャンセル」を選択している可能性があります。以前の操作をロールバックするにはどうすればいいですか?プロセスをキャンセルしましたか?

Windows Installerは、現在失敗していても、成功応答を常に報告しています。

+0

私は気にしない場合、インストーラで証明書を追加/削除する方法を見てみたいと思っています。 – jp2code

+1

@ jp2codeシステムにログインできたらすぐにhttp://xbapcertsetup.codeplex.comに公開します(今日のコードプレックスでは問題がありますか?) – LamonteCristo

答えて

6

あなたは、キャンセルが発生したか、別の例外場合は、障害の種類を返すことができる方法ActionResultの戻り値の型を持つ関数にカスタムアクションを設定する必要があります。

using Microsoft.Deployment.WindowsInstaller; 
namespace CustomAction1 
{ 
    public class CustomActions 
    { 
     [CustomAction] 
     public static ActionResult ActionName(Session session) 
     { 
      try 
      { 
       session.Log("Custom Action beginning"); 

       // Do Stuff... 
       if (cancel) 
       { 
        session.Log("Custom Action cancelled"); 
        return ActionResult.Failure; 
       } 

       session.Log("Custom Action completed successfully"); 
       return ActionResult.Success; 
      } 
      catch (SecurityException ex) 
      { 
       session.Log("Custom Action failed with following exception: " + ex.Message); 
       return ActionResult.Failure; 
      } 
     } 
    } 
} 

注:これはWIX互換のカスタムアクションです。私はWIXがMSIの作成より多くの制御を可能にするのを見つける。

+0

-1 .. MSIを生成するWindowsセットアッププロジェクトには当てはまりません。私はMVCを使用していませんし、ウェブに関連する技術を使用していません。私は誤解していますか? – LamonteCristo

+0

@ makerofthings7:Wixで作成したMSIインストーラにこれを使用します。 MVCやウェブ関連の技術に限定されるものではありません。ただし、wixをインストールする必要があります。http://www.advancedinstaller.com/user-guide/qa-c-sharp-ca.html –

+3

@ makerofthings7:これは互換性のあるカスタムアクションです。 Windowsセットアッププロジェクトの質問に特定の言及がありませんでした。 –

2

これは、1602を返すことによって、win32 DLLまたはVBScriptカスタムアクションからのみ実行できます。 EXEまたはインストーラークラスアクションを使用している場合は、ゼロ以外の戻り値はすべて失敗として扱われます。

+0

サンプルコードはどこからでも探しています。カスタムコードを実行するにはどうすればよいですか?オーバーライド内で、自分のコードの前または後に 'BaseObject.OverrideAction()'を呼び出しますか? – LamonteCristo

+0

オーバーライドは、インストーラクラスアクションによって使用されます。 win32 DLLまたはVBScriptカスタムアクションが必要です。 C++ DLLのカスタムアクションチュートリアルはこちらから入手できます。http://www.codeproject.com/KB/install/msicustomaction.aspx –

+1

私は.NET開発者です。私はそれがwin32またはVBスクリプトが*唯一の方法だと信じるのが難しいと思う...私はC#の方法に興味がある – LamonteCristo

3

InstallExceptionをスローするようにしてください。この場合、インストーラはインストールとロールバックの処理で何か問題を検出します。

public override void Commit(IDictionary savedState) 
    { 
     base.Commit(savedState); 
     Console.WriteLine("Commit ..."); 
     // Throw an error if a particular file doesn't exist. 
     if(!File.Exists("FileDoesNotExist.txt")) 
     throw new InstallException(); 
     // Perform the final installation if the file exists. 
    } 
+0

どこにこの例外をスローする必要がありますか? (オーバーライド?)カスタムコードの前または後に 'Base.SomeAction()'を呼び出す必要がありますか? – LamonteCristo

+0

私はあなたのコードでは分かりませんが、おそらくあなたがあなたのカスタムコードにそのような部分を持っているならば、あなたがそのパーミッションを検証する場所か、証明書を追加した後で例外をキャッチする場所です。 [ここ](http://msdn.microsoft.com/en-us/library/system.configuration.install.installexception.aspx)に記載されているように、この例外はオーバーライドされたイベントでスローされます。 – Samich

+0

それは完璧です。 InstallExceptionがスローされたときに呼び出されるものを教えてください。アプリケーションが「アンインストール」されているか、クリーンアップ機能が必要ですか? – LamonteCristo

関連する問題