バックアップと復元を実行できるコンテンツ クラスを作成する

Windows SharePoint Services 3.0 のバックアップおよび復元に含めるカスタム コンテンツ コンポーネントがある場合は、IBackupRestore インターフェイスを実装するクラスを使用して、そのコンポーネントを表す必要があります。このトピックでは、これを行う方法について説明します。また手順の後で、詳細な例を紹介します。

SPPersistedObject から派生するクラスを使用する必要はありませんが、コンテンツがデータベースの場合は、SPDatabase または SPContentDatabase から派生するクラスを使用することをお勧めします。この 2 つのクラスはどちらも SPPersistedObject から派生しており、IBackupRestore を実装しています。したがって、IBackupRestore のメンバの既定の実装を必要に応じて使用できます。

IBackupRestore クラスの型は、必要に応じていくつでも作成できます。また、必要であれば、それらをコンポーネント クラスのツリーとして入れ子にすることもできます。ただし、そうしたツリーの最上位のクラスは、SPPersistedObject オブジェクトから (直接または間接的に) 派生していて、SPFarm の子になっている必要があります。他のカスタム コンテンツ クラスの子になっていないコンテンツ クラスは、SPPersistedObject オブジェクトから (直接または間接的に) 派生していて、SPFarm の子になっている必要があります

使用するクラスが、既に IBackupRestore オブジェクトを実装している (SPPersistedObject から派生しているかどうかは問いません) クラスから派生している場合に、継承された IBackupRestore メンバの実装を置き換えるには、次のように、クラス宣言で IBackupRestore を明示的に参照する必要があります。

public class MyClass : SPPersistedObject, IBackupRestore

IBackupRestore メンバの "オーバーライド" では、メンバ名に "IBackupRestore" を明示的に含める必要があるほか、public キーワードを含めないようにする必要もあります。次に例を示します。

UInt64 IBackupRestore.DiskSizeRequired { ... }

また、親クラスのメンバの実装で virtual キーワードや override キーワードが使用されている場合は、次のように、実装で override キーワードを使用できます。

public override UInt64 DiskSizeRequired { ... }

警告

new キーワードを使用するかどうかに関係なく、継承されたメンバを再宣言して実装を隠さないようにしてください ([new] public UInt64 DiskSizeRequired { ... })。次の手順では、メンバ シグネチャが、既に IBackupRestore を実装しているクラスから派生していないクラスのように記述されています。クラスがそのような親から派生している場合は、シグネチャを必要なパターンに変更する必要があります。

クラスが SPPersistedObject から派生している場合は、クラスの SPPersistedObjectId() プロパティと SPPersistedObjectName() プロパティを、IBackupRestore.Id プロパティと IBackupRestore.Name プロパティの実装として使用します。これらのプロパティをオーバーライドすることはできますが、2 つ目の実装を作成することはできません。クラスの Name プロパティと Id プロパティは、1 つのみとする必要があります。

IBackupRestore のメンバを実装するには

  1. Visual Studio で新しいクラス プロジェクトを開始します。

  2. その Visual Studio プロジェクトに Windows SharePoint Services への参照を追加し、クラス ファイルに Microsoft.SharePoint.Administration 名前空間と Microsoft.SharePoint.Administration.Backup 名前空間の using ステートメントを追加します。

  3. クラスが SPPersistedObject から派生していない場合は、Name プロパティを実装します。このプロパティは、stsadm.exe の UI、サーバーの全体管理アプリケーション、およびカスタム バックアップ/復元アプリケーションの UI で、コンテンツ コンポーネントの名前として機能します。ほとんどの場合は、名前の値のためのプライベート フィールドを作成してこのプロパティを実装し、そのフィールドのラッパーとしてパブリック プロパティを実装します。その他の実装方法については、このプロパティのリファレンス トピックを参照してください。

    private String name;
    public String Name
    {
    get {return name;}
    set {name = value;}
    }
    
  4. クラスが SPPersistedObject から派生していない場合は、Id プロパティを実装します。ほとんどの場合は、名前の値のためのプライベート フィールドを作成してこのプロパティを実装し、そのフィールドのラッパーとしてパブリック プロパティを実装します。その他の実装方法については、このプロパティのリファレンス トピックを参照してください。

    private Guid id;
    public Guid Id
    {
    get {return id;}
    set {id = value;}
    }
    
  5. DiskSizeRequired プロパティを実装します。クラスがいくつかの子 IBackupRestore クラスを格納するコンテナにすぎない場合は、このプロパティで 0 を返します。それ以外の場合は、コンテンツのサイズを計算します (IBackupRestore 以外の子オブジェクトのサイズはすべて計算に含めますが、子 IBackupRestore オブジェクトのサイズは計算に含めません。これらのオブジェクトには、それぞれ固有の DiskSizeRequired プロパティがあり、その値が Windows SharePoint Services 3.0 によって自動的に加算されます)。次の例では、FrontEndFilePaths というコレクションにパスが含まれているすべてのファイルのサイズを合計しています。

    public UInt64 DiskSizeRequired
    {
        get 
        {
            UInt64 total = 0;
            List<FileInfo> FrontEndFiles = new List<FileInfo>(NUMBER_OF_FILES_TO_BACK_UP);
    
            foreach (String path in FrontEndFilePaths)
            {
                FileInfo file = new FileInfo(path);
                FrontEndFiles.Add(file);
            }
    
            foreach (FileInfo file in FrontEndFiles)
            {
                total = total + (UInt64)file.Length;
            }
    
            return total;
        }
    } 
    
  6. CanSelectForBackup プロパティを実装します。ユーザーがこのクラスのオブジェクトを親オブジェクトと別にバックアップできないようにする場合は、get アクセサで false を返します。ユーザーがいつでもこのクラスの任意のオブジェクトを選択して単独でバックアップできるようにする場合は、get アクセサで true を返します。どちらの場合も、set アクセサは空の中カッコのペア "{ }" にします。親と別にバックアップできるオブジェクトとできないオブジェクトがある場合は、このプロパティをプライベートの Boolean フィールドのラッパーとして実装します。

  7. CanSelectForRestore プロパティを実装します。ユーザーがこのカスタム コンポーネント クラスのオブジェクトを親オブジェクトと別に復元できないようにする場合は、get アクセサで false を返します。ユーザーがいつでもこのクラスの任意のオブジェクトを選択して単独で復元できるようにする場合は、get アクセサで true を返します。どちらの場合も、set アクセサは空の中カッコのペア "{ }" にします。親と別に復元できるオブジェクトとできないオブジェクトがある場合は、このプロパティをプライベートの Boolean フィールドのラッパーとして実装します。

  8. CanRenameOnRestore プロパティを実装します。ユーザーがこのカスタム コンポーネント クラスのオブジェクトを新しい場所に復元できないようにする場合は、get アクセサで false を返します。ユーザーがこのクラスの任意のオブジェクトを移行できるようにする場合は、get アクセサで true を返します。このクラスのオブジェクトを移行できるときとできないときがある場合は、このプロパティをプライベートの Boolean フィールドのラッパーとして実装します。

  9. AddBackupObjects() メソッドを実装します。

    1. 実装コードでは、まず最初に、コンポーネントを追加できる有効な親が存在しない場合に例外をスローする必要があります。

    2. AddChild() メソッドを使用して、バックアップ操作や復元操作で処理するオブジェクトのツリーにコンポーネントを追加します。

    3. SetParameter() メソッドを使用して、バックアップ/復元アプリケーションの UI で使用できるコンポーネントの型の名前と説明を指定します。

    4. コンポーネントに子 IBackupRestore オブジェクトがある場合は、それらを反復処理して、各子オブジェクトの AddBackupObjects() メソッドを再帰的に呼び出す必要があります。

    5. AddBackupObjects() メソッドの実装に関するその他のヒントについては、このメソッドのリファレンス トピックを参照してください。

    次のコード例は、コンテンツ クラスに子 IBackupRestore オブジェクトの ChildContentCollection があることを前提としています。クラスに複数の型の子コンポーネントがある場合は、型ごとに個別のコレクションを使用して、各コレクションを反復処理できます。

    public void AddBackupObjects(SPBackupRestoreObject parent)
    {
        if (parent == null)
        {
            throw new ArgumentNullException("parent");
        }
    
        SPBackupRestoreObject self = parent.AddChild(this);
        self.Information.SetParameter(SPBackupRestoreObject.SPTypeName, this.GetType());
        self.Information.SetParameter(SPBackupRestoreObject.SPDescription,
        "Description of custom content component");
    
        foreach (ChildContent child in ChildContentCollection)
        {
            IBackupRestore childIBR = child as IBackupRestore;
            childIBR.AddBackupObjects(self);
        }
    }
    
  10. OnAbort() メソッドを実装します。このメソッドでは常に true を返します。ほとんどの場合、ほかには何も行いません。例外については、OnAbort() のリファレンス トピックを参照してください。

  11. OnPrepareBackup() メソッドを実装します。少なくとも、SetParameter() メソッドを使用してコンテンツ オブジェクトの名前を指定する必要があります。それ以外には、一般的な規則はほとんどありません。詳細については、OnPrepareBackup() のリファレンス トピックを参照してください。次の例は、このメソッドの最小限の実装を示しています。通常はこれで十分です。

    public Boolean OnPrepareBackup(Object sender, SPBackupInformation args)
    {
        if (args == null)
        }
            throw new ArgumentNullException("args");
        }
        args.SetParameter(SPBackupRestoreObject.SPName, this.Name);
        return true;
    }
    
  12. OnBackup() メソッドを実装します。コンテンツ クラスに IBackupRestore 子オブジェクト以外のコンテンツがない場合は、CurrentProgess() を単純に、OnBackup() メソッドと OnPrepareBackup() メソッドによってバックアップ操作の合計時間の何パーセントくらいが消費されたかを表す値に設定します。それから、次の例のように true を返します。IBackupRestore 子オブジェクトの OnBackup メソッドは呼び出さないでください。

    public Boolean OnBackup(Object sender, SPBackupInformation args)
    {
        if (args == null)
        {
            throw new ArgumentNullException("args");
        }
        args.CurrentProgress = 50;
        return true;
    }
    

    クラスに IBackupRestore 子オブジェクト以外のコンテンツがある場合は、そのコンテンツを args.Location にコピーし、コピーが失敗した場合に false を返す必要があります。IBackupRestore を実装していないすべての子オブジェクトをバックアップするロジックを含める必要がありますが、IBackupRestore を実装している子オブジェクトは、明示的にバックアップしないでください。それらの子オブジェクトは、ランタイムによって呼び出されるそれぞれの OnBackup() メソッドによってバックアップされます。子オブジェクトの OnBackup() メソッドはコードで呼び出さないようにする必要があります。次の例は、OnBackup() の基本的な実装について全体的な構造を示しています。

    public Boolean OnBackup(Object sender, SPBackupInformation args)
    {
        if (args == null)
        {
            throw new ArgumentNullException("args");
        }
        args.CurrentProgress = 50;
        Boolean successSignal = true;
    
        // TODO: Implement copying your content to args.Location
        //       If the copy fails, set successSignal to false.
    
        return successSignal;
    }
    
  13. OnBackupComplete() メソッドを実装します。少なくとも、次の例のように、CurrentProgess() を 100% に設定し、true を返す必要があります。通常はこれで十分です。実行する必要がある可能性があるその他の処理については、OnBackupComplete のリファレンス トピックを参照してください。

    public Boolean OnBackupComplete(Object sender, SPBackupInformation args)
    {
        if (args == null)
        {
            throw new ArgumentNullException("args");
        }
        args.CurrentProgress = 100;
        return true;
    }
    
  14. OnPreRestore メソッドを実装します。ほとんどの場合、復元操作に準備は必要ないため、OnPreRestore の実装では true を返すだけです。実行する必要がある可能性があるその他の処理については、OnPreRestore のリファレンス トピックを参照してください。

  15. OnRestore メソッドを実装します。

    • コンテンツ クラスが移行可能な場合は、コードで復元方法をチェックして、New だった場合に Rename() を呼び出す必要があります。

    • コンテンツ クラスに IBackupRestore 子オブジェクト以外のコンテンツがない場合は、CurrentProgess() を単純に、OnRestore メソッドと OnPreRestore メソッドによって復元操作の合計時間の何パーセントくらいが消費されたかを表す値に設定します。それから、次の例のように true を返します。IBackupRestore 子オブジェクトの OnRestore メソッドは呼び出さないでください。

    public Boolean OnRestore(Object sender, SPRestoreInformation args)
    {
        if (args == null)
        {
            throw new ArgumentNullException("args");
        }
        if (args.RestoreMethod == SPRestoreMethodType.New)
        {
            args.Rename();
        }
        args.CurrentProgress = 50;
        return true;
    }
    
    • クラスに IBackupRestore 子オブジェクト以外のコンテンツがある場合は、そのコンテンツを復元先にコピーする必要があります。何らかの理由でコンテンツのコピーに失敗した場合は、false を返します。

    次の例は、OnRestore() の基本的な実装について全体的な構造を示しています。

    public Boolean OnRestore(Object sender, SPRestoreInformation args)
    {
        if (args == null)
        {
            throw new ArgumentNullException("args");
        }
        if (args.RestoreMethod == SPRestoreMethodType.New)
        {
            args.Rename();
        }
        args.CurrentProgress = 50;
        Boolean successSignal = true;
    
        // TODO: Implement copying your content to the destination.
        //       If the copy fails, set successSignal to false.
    
        return successSignal;
    }
    
  16. OnPostRestore メソッドを実装します。少なくとも、次の例のように、CurrentProgess() を 100% に設定し、true を返す必要があります。通常はこれで十分です。実行する必要がある可能性があるその他の処理については、OnPostRestore のリファレンス トピックを参照してください。

    public Boolean OnPostRestore(Object sender, SPRestoreInformation args)
    {
        if (args == null)
        {
            throw new ArgumentNullException("args");
        }
        args.CurrentProgress = 100;
        return true;
    }
    

必要に応じてクラスに他のメンバを追加する

  1. フィールド、プロパティ、およびヘルパー メソッドを必要に応じて追加して、クラスを完成させます。その際には、以下の点に注意してください。

    • 子コンテンツ オブジェクトを保持するには、フィールドとプロパティを使用します。

    • クラスが SPPersistedObject から派生している場合は、構成データベースに保持するフィールドの宣言の前に、[Persisted] 属性を付ける必要があります。ただし、フィールドをこのようにしてマークできるのは、フィールドの型がプリミティブ型 (文字列、整数、GUID など)、他の SPPersistedObject オブジェクトや SPAutoserializingObject オブジェクト、またはそれらのコレクションの場合だけです。たとえば、クラスの FileInfo フィールドを [Persisted] 属性でマークすることはできません。保持しようとしているデータが保持可能なクラスではない場合は、保持可能なクラスのいずれかを使用します。たとえば、上の DiskSizeRequired プロパティの実装例で想定されているクラスは、ファイル名のコレクションを保持し、実行時にそれらのファイル名を使用して FileInfo オブジェクトの一時コレクションを作成します。

    • クラスで同じ型の子を複数持つことができる場合は、コレクション型またはその他の列挙可能な型のプロパティやフィールドを作成して、特定の型のすべての子のコレクションを保持します。これは、子の型自体が IBackupRestore を実装する場合に特に重要になります。AddBackupObjects() メソッドの実装でそれらの子を反復処理して、それぞれの子の AddBackupObjects() メソッドを呼び出す必要があるからです。詳細については、上の AddBackupObjects() メソッドの実装手順を参照してください。

  2. 必要に応じてフィールドやプロパティを初期化するためのコンストラクタをクラスに追加します。クラスが SPPersistedObject から派生している場合は、少なくとも 1 つのコンストラクタが必要です。そのコンストラクタで、オブジェクトに名前を付けて親に割り当てます。通常、このようなコンストラクタは、少なくとも次の 2 つの引数を受け取ります。

    • コンテンツ オブジェクトの名前になる String 引数。

    • コンテンツ オブジェクトの親を表す SPPersistedObject 引数。

    このコンストラクタは、同じ 2 つの引数を受け取る基本コンストラクタを呼び出す必要があります。次に例を示します。

    public MyContentComponent(String componentName, SPPersistedObject parent, SomeTypesomeOtherArgument, ... ) 
                       : base(componentName, parent)
    {
        somePrivateField = someOtherArgument;
        ...
    }
    

    コンテンツ オブジェクトがカスタム IBackupRestore オブジェクト ツリーの最上位オブジェクトである場合は、親として SPFarm.Local を渡す必要があります。カスタム コンポーネント型が常に最上位オブジェクトである場合は、SPPersistedObject 引数を省略して、基本コンストラクタの呼び出しに SPFarm.Local への参照をハードコーディングします。次に例を示します。

    public MyContentComponent(String componentName, SomeTypesomeOtherArgument, ... ) 
                       : base(componentName, SPFarm.Local)
    {
        somePrivateField = someOtherArgument;
        ...
    }
    

    クラスのオブジェクトが常に同じ名前を持つ場合は、String 引数を省略して、基本コンストラクタの呼び出しにその名前をハードコーディングします (特定の型のオブジェクトがすべて同じ名前を持つ場合は、特定の親に対してその型の子が複数存在することはありません。したがって、オブジェクトがファームの子である場合、その型のオブジェクトはファーム全体で 1 つだけになります)。

  3. クラス プロジェクトをコンパイルします。

    警告

    アセンブリに厳密な名前を付けて、一般的なアセンブリ キャッシュ (GAC) に配置する必要があります。

クラスのオブジェクトを作成してファームの子にするには

  1. Visual Studio で新しいコンソール アプリケーション プロジェクトを開始します。

  2. カスタム コンポーネント クラスの DLL への参照をプロジェクトに追加します。

  3. Microsoft.SharePoint.Administration の using ステートメントを追加します。

  4. カスタム コンポーネント クラスで使用した名前空間の using ステートメントを追加します (または、同じ名前空間をそのままコンソール アプリケーションで使用します)。

  5. プロジェクトの Main メソッドに、カスタム コンポーネント クラスのコンストラクタの呼び出しを追加します。カスタム型の階層を作成した場合は、最上位クラスのコンストラクタを呼び出します。

  6. 必要に応じて、コンポーネントのコンストラクタの呼び出しの前に、そのコンストラクタのパラメータを作成するコードを追加します。

  7. コンポーネントのコンストラクタの呼び出しの後に、コンポーネント オブジェクトの Update メソッドを呼び出す必要があります。Main メソッドの内容の例を次に示します。

    MyContentComponent myContentObject = new MyContentComponent("component name", SPFarm.Local);
    myContentObject.Update();
    
  8. アプリケーションをコンパイルして実行します。

  9. サーバーの全体管理アプリケーションで、[サーバー構成の管理] の [バックアップの実行] に移動します。[バックアップの実行] ページに、作成したオブジェクトがファームの子として表示されます。

    注意

    下の「」には、カスタム コンテンツ オブジェクトを作成および削除するためのサンプル コンソール アプリケーションがあります。

開発のアドバイス

ここでは、カスタム コンテンツ クラスの開発に役立つヒントを紹介します。カスタム コンテンツ クラスを開発する際には、オブジェクトを作成してファームに追加するという作業を何度も繰り返すことになるため、これらのヒントが特に有用です。

注意点

  1. 構成データベースからオブジェクトを削除する必要がある場合は、Delete を使用します。

  2. obj.Update() を呼び出した場合に、obj と同じクラス、Name プロパティ値、および親を持つオブジェクトが既に構成データベースに存在すると、例外がスローされます。そのような場合は、オーバーロードされたバージョンの Update を使用することもできます。

  3. 下の 2 つ目の「」には、構成データベースのカスタム オブジェクトを追加または削除するために使用できるサンプル コンソール アプリケーションがあります。

  4. IBackupRestore クラスを再コンパイルした場合は、必ず iisreset をコマンド ラインで実行してください。サーバーを再起動する必要がある場合もあります。

  5. さまざまな IBackupRestore.On* メソッドで、SPBackupInformation パラメータまたは SPRestoreInformation パラメータのどちらかが使用されます。メソッドのメンバを使用して、デバッグを行うことができます。特に Log() メソッドの場合は、便利です。

次のコードは、フロントエンド サーバー上の単一の Web.config ファイルを表すカスタム コンテンツ コンポーネントを実装します。コンストラクタの実装のファイル パスの TestSite という部分を、使用しているテスト サーバーのディレクトリ名に置き換えてください。コンパイル済みアセンブリは、厳密な名前を付けて GAC にインストールする必要があります。

クラス実装の次の例は、コンポーネントをファームの子として登録したり、ファームから削除したりする、単純なコンソール アプリケーションのコードです。

using System;
using System.IO;
using System.Collections.Generic;
using Microsoft.SharePoint.Administration;
using Microsoft.SharePoint.Administration.Backup;

namespace MyCompany.SharePoint.Administration
{
    public class CriticalFiles : SPPersistedObject, IBackupRestore
    {

        public CriticalFiles() { }

        public CriticalFiles(String componentName, SPPersistedObject parent) 
                   : base(componentName, parent)
        {
            String pathOfFile = @"C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS\TestSite\Web.config";
            FrontEndFilePaths.Add(pathOfFile);
        }

        [Persisted]
        private const Int32 NUMBER_OF_FILES_TO_BACK_UP = 1;

        [Persisted]
        private List<String> FrontEndFilePaths = new List<String>(NUMBER_OF_FILES_TO_BACK_UP);

        public Boolean CanSelectForBackup
        {
            get { return true; }
            set { }
        }

        public Boolean CanSelectForRestore
        {
            get { return true; }
            set { }
        }

        public Boolean CanRenameOnRestore
        {
            get { return false; }
        }

        public UInt64 DiskSizeRequired
        {
            get
            {
                UInt64 total = 0;
                List<FileInfo> FrontEndFiles = new List<FileInfo>(NUMBER_OF_FILES_TO_BACK_UP);
                
                foreach (String path in FrontEndFilePaths)
                {
                    FileInfo file = new FileInfo(path);
                    FrontEndFiles.Add(file);
                }
                
                foreach (FileInfo file in FrontEndFiles)
                {
                    total = total + (UInt64)file.Length;
                }
                
                return total;
            }
        }

        public void AddBackupObjects(SPBackupRestoreObject parent)
        {
            if (parent == null)
            {
                throw new ArgumentNullException("parent");
            }

            SPBackupRestoreObject self = parent.AddChild(this);
            self.Information.SetParameter(SPBackupRestoreObject.SPTypeName, this.GetType());
            self.Information.SetParameter(SPBackupRestoreObject.SPDescription, "The critical files on all front end servers.");
        }

        public Boolean OnAbort(Object sender, SPBackupRestoreInformation args)
        {
            return true;
        }

        public Boolean OnPrepareBackup(Object sender, SPBackupInformation args)
        {
            if (args == null)
            {
                throw new ArgumentNullException("args");
            }
            args.SetParameter(SPBackupRestoreObject.SPName, this.Name);
            return true;
        }

        public Boolean OnBackup(Object sender, SPBackupInformation args)
        {
            if (args == null)
            {
                throw new ArgumentNullException("args");
            }
            
            Boolean successSignal = true;

            foreach (String path in FrontEndFilePaths)
            {
                FileInfo file = new FileInfo(path);
                try
                {
                    String mappedFileName = args.GenerateFileMapping(file.Name);
                    file.CopyTo(args.Location + @"\" + mappedFileName, true);
                    args.Log(SPBackupRestoreLogSeverity.Verbose, "Backed up " + file.Name + " in (" + mappedFileName + ")");
                }
                catch (Exception e)
                {
                    args.Log(SPBackupRestoreLogSeverity.Verbose, file.Name + " not backed up: " + e.Message);
                    successSignal = false;
                }
            }

            args.CurrentProgress = 50;
            return successSignal;
        }

        public Boolean OnBackupComplete(Object sender, SPBackupInformation args)
        {
            if (args == null)
            {
                throw new ArgumentNullException("args");
            }
            args.CurrentProgress = 100;
            return true;
        }

        public Boolean OnPreRestore(Object sender, SPRestoreInformation args)
        {
            if (args == null)
            {
                throw new ArgumentNullException("args");
            }
            return true;
        }

        public Boolean OnRestore(Object sender, SPRestoreInformation args)
        {
            if (args == null)
            {
                throw new ArgumentNullException("args");
            }

            // If the CriticalFiles object was deleted from the farm after it was
            // backed up, restore it to the configuration database.
            CriticalFiles cf = SPFarm.Local.GetChild<CriticalFiles>(this.Name);
            if (cf == null)
            {
                this.Update();
                args.Log(SPBackupRestoreLogSeverity.Verbose, this.Name + " added back to configuration database.");
            }

            Boolean successSignal = true;

            // TODO: The following loop restores files to the local server. If there are 
            //       multiple front end servers, your code must iterate through all of 
            //       SPFarm.Local.Servers and restore the same files to every server whose
            //       Role property is SPServerRole.WebFrontEnd

            foreach (String path in FrontEndFilePaths)
            {
                FileInfo backupCopy = new FileInfo(path);
                String mappedFileName = args.ReverseFileMapping(backupCopy.Name);
                FileInfo file = new FileInfo(args.Location + @"\" + mappedFileName);

                try
                {
                    file.CopyTo(path, true);
                    args.Log(SPBackupRestoreLogSeverity.Verbose, "Restored " + backupCopy.Name);
                }
                catch (Exception e)
                {
                    args.Log(SPBackupRestoreLogSeverity.Verbose, file.Name + " not restored: " + e.Message);
                    successSignal = false;
                }
            }
            
            args.CurrentProgress = 50;
            return successSignal;
        }
        
        public Boolean OnPostRestore(Object sender, SPRestoreInformation args)
        {
            if (args == null)
            {
                throw new ArgumentNullException("args");
            }

            args.CurrentProgress = 100;
            return true;
        }

    }
}

以下は、構成データベースのコンテンツ オブジェクトを追加または削除するコンソール アプリケーションです。

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint.Administration;
using Microsoft.SharePoint.Administration.Backup;

namespace MyCompany.SharePoint.Administration
{
    class Program 
    {
        static void Main(string[] args)
        {
            CriticalFiles cf = SPFarm.Local.GetChild<CriticalFiles>("Critical Front End Files");
            if (cf == null)
            {
                Console.WriteLine("There is no CriticalFiles object in the configuration database.");
                Console.Write("Enter 'A' to add it. Press Return to do nothing:");
                String response = Console.ReadLine();
                if (response == "A")
                {
                    CriticalFiles myCriticalFiles = new CriticalFiles("Critical Front End Files", SPFarm.Local);
                    myCriticalFiles.Update();
                }
            }
            else
            {
                Console.WriteLine("There is a CriticalFiles object in the configuration database.");
                Console.Write("Enter 'D' to delete it. Press Return to do nothing:");
                String response = Console.ReadLine();
                if (response == "D")
                {
                    cf.Delete();
                }
            }
        }// end Main
    }// end Program
} 

See Also

タスク

[方法] プログラムを使用してコンテンツをバックアップする

[方法] プログラムを使用してコンテンツを復元する

[方法] プログラムを使用して単一のサイト コレクションのバックアップと復元を行う

参照

Microsoft.SharePoint.Administration.Backup

Backup

Restore

概念

Windows SharePoint Services のバックアップ/復元オブジェクト モデルを使用したプログラミング