2008年6月10日火曜日

.NET セットアッププロジェクト カスタム動作

Installクラスを使用したdllファイルのカスタムアクションを定義します。

前々回自作のアセンブリのインストールで、[参照の追加]ダイアログに表示するには?
で作成したソリューションを流用します。

ソリューションにクラスライブラリ「Action1」を追加し、Installerクラスを継承したInstaller1クラスを作成します。


Installer1.vb
<System.ComponentModel.RunInstaller(True)> _
Public Class Installer1
Inherits System.Configuration.Install.Installer

 

Public Overrides Sub Install( _
ByVal stateSaver As System.Collections.IDictionary)
MyBase.Install(stateSaver)

 

Dim id As String = Me.Context.Parameters("id")
Dim pswd As String = Me.Context.Parameters("pswd")

 

System.Windows.Forms.MessageBox.Show("ID:" & id & "   PSWD:" & pswd)
End Sub

 

End Class


MSDNライブラリ RunInstallerAttribute クラス
MSDNライブラリ Installer クラス


セットアッププロジェクトを選択し、右クリックメニューより「表示」→「カスタム動作」をクリックします。
カスタム動作エディタが表示されます。


「インストール」を選択し、右クリックメニューより「カスタム動作の追加」をクリックします。
「プロジェクトから項目を選択」ダイアログが起動します。


「プロジェクトから項目を選択」ダイアログの検索対象コンボボックスを「アプリケーションフォルダ」に変更し
「出力の追加」ボタンをクリックします。
「プロジェクト出力グループの追加」ダイアログより「Action1のプライマリ出力」を追加します。


カスタム動作エディタの「インストール」ノードに「Action1のプライマリ出力」が追加されますので
「Action1のプライマリ出力」を右クリックし、プロパティウインドウを表示します。



CustomActionDataプロパティを「/id=[ID] /pswd=[PSWD]」と入力します。
[ID]と/の間に半角スペースがありますので注意してください。

Installerクラスを使ったカスタムアクションにデータを渡すときは、
CustomActionDataプロパティに「/パラメータ名=パラメータ値」という形式で指定します。
複数のデータを渡す場合は、スペース文字で区切ります。
また、Windows Installerのプロパティを使うときは、[]で囲みます。
Installerクラス内でデータを取得するには、InstallContext.Parametersプロパティを使います。

つまり
カスタム動作のCustomActionDataプロパティでは
前回セットアッププロジェクト ユーザーインターフェースで追加した
テキストボックス(A)ダイアログのEdit1Propertyプロパティの値とEdit2Properyプロパティの値を、id、pswdというパラメータ名でInstallerクラスに渡すよう設定します。
Installer1クラスでは、Me.Context.Parameters("id")でパラメータ名がidのパラメータ値を取得しています。




動作確認


セットアッププロジェクトをビルドし、インストールを実行します。
ID、パスワードに適当に値を入力します。


インストール終了後に、ID、パスワードが表示されればOKです。


捕捉


VSのセットアップの機能ではインストール終了後にカスタム動作が発生します。
たとえばID、パスワードを入力し「次へ」ボタンで条件分岐を行いたいなどの要件には対応できません。
ORCAなどを使って追加作業を行うか、VSセットアッププロジェクトではなく、WiXやInstalllShieldなどのインストーラ作成ツールを使用する必要があります。

0 件のコメント: