カスタム動作
カスタム動作は、セットアッププロセスで実行されるインストールコンポーネントです。カスタム動作エディタを表示するには、図12に示すように、セットアッププロジェクトを右クリックし、[View]、[Custom Actions]の順にクリックします。図12からわかるように、カスタム動作は、インストール(Install)、確定(Commit)、ロールバック(Rollback)、アンインストール(Uninstall)の4つのいずれの時点でも実行できます。本稿の目的を達成するためには、インストールの段階でいくつかのファイルとフォルダをセットアップする必要があります。指定のフォルダがすでに存在する場合、フォルダの再作成は行いませんが、ファイルは再作成します。
![図12 カスタム動作エディタ 図12 カスタム動作エディタ](http://cz-cdn.shoeisha.jp/static/images/article/317/040324_12.gif)
カスタム動作プログラムの作成は正攻法で行います。ここでは新たなクラスライブラリプロジェクトとして、インストール中にターゲットコンピュータ上のファイルやフォルダを操作するためのSetupCustomAction
クラスを作成します。そのためには、[New Project Wizard]を使ってプロジェクトを作成し、テンプレートとして[Class Library]を指定します。デフォルトでは、プロジェクトにClass1
というクラスが作成されます。プロジェクトからこのクラスを削除し、図13に示すように、[Add New Item]ウィザードを使ってプロジェクトにインストーラクラス(Installer Class)を追加します。
![図13 カスタム動作プロジェクトへのインストーラクラスの追加 図13 カスタム動作プロジェクトへのインストーラクラスの追加](http://cz-cdn.shoeisha.jp/static/images/article/317/040324_13.gif)
これでコードを書く準備ができました。実際のコードを図14に示します。
SetupCustomAction
クラスはSystem.Configuration.Install.Installer
を継承しており、RunInstaller
属性がtrue[RunInstaller(true)]
であることに注目してください。この属性がtrueでなければ、SetupCustomAction
はセットアッププログラムによって実行されません。
SetupCustomAction
クラスにコードを追加するためにまず、Install
メソッドをオーバーライドします。
public override void Install(IDictionary stateSaver) { base.Install (stateSaver); string companyName = Context.Parameters["cName"]; CreateFilesFolders(companyName); }
次に、設定ファイルを作成します。実装の詳細についてはコードを参照してください。
この時点で、SetupCustomActionプロジェクトを右クリックし、[Build]をクリックすることでSetupCustomActionのコンパイルを行います。これで、コンパイルされたクラス(具体的には.dll)ファイルをセットアッププロジェクトに追加する準備ができました。この追加を行うには、セットアッププロジェクトを右クリックし、[Add]、[File]の順にクリックします。次に、[Add Files]ダイアログボックスから「SetupCustomAction.dll」を選択します(適当なフォルダを開く必要があるかもしれません)。セットアッププロジェクトの下に「SetupCustomAction.dll」が表示されます。
セットアッププロジェクトにこのDLLファイルを追加したら、ソリューションエクスプローラのセットアッププロジェクトを右クリックし、ポップアップメニューの[View]、[Custom Actions]を順にクリックして、カスタム動作エディタを開きます。カスタム動作エディタの[Install]フォルダを右クリックし、ポップアップメニューの[Add Custom Action...]をクリックします。次に、[Select Item in Project]ダイアログボックスの[Applications Folder]をダブルクリックし、「SetupCustomAction.dll」を選択して、[OK]をクリックします。このときの様子を図15に示します。
さらに、インストールプロセスで実行できるように、この「SetupCustomAction.dll」をセットアッププロジェクトに導入する必要があります。また、ユーザーの入力をコードから参照可能な変数にリンクさせる必要もあります。そのためには、図16に示すように、「SetupCustomAction.dll」のプロパティを設定します。
このCustomActionData
プロパティによって、cName
という変数が「COMPANYNAME_A1」という入力フィールドに関連付けられます。この関連付けを行っておくと、入力された値を次のコードで取得できるようになります。
string companyName = Context.Parameters["cName"];
CustomActionData
プロパティは「/name=value」という形式をとります。値が複数ある場合は、間に空白1つ分の区切りを入れる必要があります(例:/name1=value1 /name2=value2)。また、値が空白を含む場合は、引用符で囲む必要があります。これでXMLファイルを生成するメソッドを書く準備が整いました。このXMLファイルにユーザーの情報を記録し、実行時にはこの情報を読み取ってインターフェイスをカスタマイズします。最後に、実際に配布するためのセットアッププログラムの再コンパイルを行います。
まとめ
カスタムアプリケーションの作成は、ソフトウェア開発における長年の課題です。これまでは、エンドユーザーごとに別のライセンスファイルを提供するなど、いくつかの方法を使ってカスタマイズが行われてきました。今では、Visual Studio .NETを使用することで、インストーラ派生クラスによってカスタム動作を実現するデプロイメントプロジェクトを作成できます。VS .NETのカスタム配置の機能を使えば、配置プロセス中にユーザーからの入力情報を取得して簡単に設定ファイルを作成できます。実行時には、この設定ファイルから情報を読み取って、アプリケーションのインターフェイスを適切にカスタマイズできます。
参考資料
- VS .NET Setup and Deployment Projects, asptoday.com.
- Deploy Apps With Ease
- Deploying Serviced Components
- MSDN