[Kateryna’s Blog MSDeploy Custom Provider to execute batch files ]の翻訳です。
IIS Web 配置ツール (MSDeploy とも呼ばれる) を使用すると、IIS Web サーバー、Web アプリケーション、Web サイトの移行、管理、展開を簡単に行うことができます。MSDeploy には、カスタム プロバイダーを実行する機能もあります。これらのプロバイダーを実行することによって、MSDeploy の機能を最大限に活用できます。
この記事では、MSDeploy の同期処理の中でバッチ ファイル コマンドを実行するカスタム MSDeploy プロバイダーのサンプル コードを紹介します。バッチ ファイル プロバイダーを使用することによって、展開の前後にカスタム スクリプトを実行し、展開処理をシームレスに行うことができます。たとえば、特定の MSDeploy の同期についてパフォーマンス カウンターをセットアップしたり、MSDeploy ではなく xcopy でコンテンツをコピーするバッチ ファイルを作成したりする (ただし、xcopy よりも MSDeploy の方が高速です) ことができます。この記事のコードは独自の MSDeploy カスタム プロバイダーを作成するためのサンプルとして使用できるようになっており、MSDeploy RTW リリースを待つ必要はありません (MSDeploy チームが RTW リリースでバッチ ファイル プロバイダーを提供する予定だ、という噂があります)。いずれにせよ、このコードは、Yamini Jagadeesan 女史が数か月前に発表した、MySql データベースを別のデータベースに同期するための MSDeploy MySql カスタム プロバイダーに関する、優れたサンプルとブログの記事に基づいて作成されています。まだこの記事をお読みになっていない方は、ぜひご覧になることをお勧めします。MSDeploy カスタム プロバイダーの最初のソリューションとして参考になるでしょう。
プロバイダーのインストールの手順を実行するには、gacutil をダウンロードしてアセンブリを GAC に追加する必要があります。gacutil は、.NET Framework SDK の一部として入手することも、個別にダウンロードすることもできます。
まず、プロジェクトを含む zip ファイルをダウンロードします。ソリューションには以下のファイルが含まれています。
プロバイダーをインストールするには、以下の作業が必要です。
文字列値によって、使用する DeploymentProviderFactory、名前空間、および最終的にはアセンブリ情報を含むプロバイダーに MSDeploy を指定します。バッチ プロバイダーの場合は、文字列レジストリ値 "MSDeployCustomProviders.BatchProviderFactory, BatchProvider, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a0b65de31a9f7a07, processorArchitecture=MSIL" を追加する必要があります。ここで、
利便性のために、この両方の処理を行う register.bat が用意されています (処理は、プロジェクトのプロパティに従ってプロジェクトがコンパイルされるたびに実行されます。Visual Studio で、[プロジェクトのプロパ���ィ]、[ビルド イベント] の順にクリックし、register.bat がビルド後のイベントとして呼び出されることを確認してください)。
if (this.BaseContext.IsDestinationObject)
想定しているタスクに合わせてプロバイダーを調整することができます。たとえば、バッチ ファイルのコマンドを実行するプロセスの ProcessStartInfo を調整して、同期中の動作を制御できます。プロセスの出力およびエラー ストリームをリダイレクトして、実行の結果をログに記録できます。
コメントや質問がある場合は、お気軽に投稿してください。