チュートリアル : カスタム動作を使用して、インストール時にデータベースを作成する

更新 : 2007 年 11 月

次のチュートリアルでは、カスタム動作と CustomActionData プロパティを使用してインストール中にデータベースとデータベース テーブルを作成する方法について、手順を説明します。

49b92ztk.alert_note(ja-jp,VS.90).gifメモ :

このチュートリアルでは、アプリケーションを配置するコンピュータに SQL Server が必要です。

49b92ztk.alert_note(ja-jp,VS.90).gifメモ :

使用している設定またはエディションによっては、ヘルプの記載と異なるダイアログ ボックスやメニュー コマンドが表示される場合があります。設定を変更するには、[ツール] メニューの [設定のインポートとエクスポート] をクリックします。詳細については、「Visual Studio の設定」を参照してください。

49b92ztk.alert_note(ja-jp,VS.90).gifメモ :

次の手順は、Visual Basic プロジェクトを使用して配置プロジェクトを作成する方法を示しています。この一般的な原則は、Windows ベースのアプリケーションの配置をサポートするすべての言語の Visual Studio プロジェクトに適用できます。

インストーラ クラスを作成するには

  1. [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。

  2. [新しいプロジェクト] ダイアログ ボックスで、[プロジェクトの種類] ペインの [Visual Basic プロジェクト] をクリックし、[テンプレート] ペインの [クラス ライブラリ] をクリックします。[ファイル名] ボックスに「DBCustomAction」と入力します。

  3. [プロジェクト] メニューの [新しい項目の追加] をクリックします。

  4. [新しい項目の追加] ダイアログ ボックスで、[インストーラ クラス] をクリックします。[ファイル名] ボックスに「VbDeployInstaller.vb」と入力します。

データ接続オブジェクトを作成するには

  1. サーバー エクスプローラで、[データ接続] を選択します。これを右クリックし、[接続の追加] をクリックします。

  2. [データ ソースの選択] ダイアログ ボックスの [Microsoft SQL Server] をクリックします。

  3. [接続の追加] ダイアログ ボックスで以下の作業を行います。

    1. [サーバー名] の一覧でサーバー名を選択するか、サーバー名を入力します。

    2. [Windows 認証を使用] をクリックします。

    3. [データベース] ボックスに「master」と入力します。

    4. [OK] をクリックし、ダイアログ ボックスを閉じます。

  4. [データ] メニューの [新しいデータ ソースの追加] をクリックし、ウィザードを使用して、以前の手順で確立した接続を追加します。データ ソースがプロジェクト内にあることを確認するには、[データ] メニューの [データ ソースの表示] をクリックします。

テキスト ファイルに SQL ステートメントを記述してデータベースを作成するには

  1. ソリューション エクスプローラで DBCustomAction プロジェクトを選択します。[プロジェクト] メニューの [新しい項目の追加] をクリックします。

  2. [新しい項目の追加] ダイアログ ボックスで、[テキスト ファイル] をクリックします。[ファイル名] ボックスに「sql.txt」と入力します (小文字を使用してください)。

  3. sql.txt ファイルに次のコードを追加します。

    CREATE TABLE [dbo].[Employees] (
    [Name] [char] (30) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Rsvp] [int] NULL ,
    [Requests] [nvarchar] (4000) COLLATE SQL_Latin1_General_CP1_CI_AS NULL 
    ) ON [PRIMARY];
    
    ALTER TABLE [dbo].[Employees] WITH NOCHECK ADD 
    CONSTRAINT [PK_Employees] PRIMARY KEY CLUSTERED 
    (
    [Name]
    ) ON [PRIMARY];
    
  4. ソリューション エクスプローラで sql.txt を選択します。[プロパティ] ウィンドウで、[ビルド アクション] プロパティを「埋め込まれたリソース」に設定します。

テキスト ファイルを読み取るコードをインストーラ クラスに追加するには

  1. ソリューション エクスプローラで、VbDeployInstaller.vb を選択します。[表示] メニューの [コード] をクリックします。

  2. モジュールの冒頭に、次の Imports ステートメントを追加します。

    Imports System.IO
    Imports System.Reflection
    Imports System.Data.SqlClient
    
  3. MyBase.New の宣言の後の VbDeployInstaller クラスに、次のコードを追加します。

    Public Class VbDeployInstaller
    
        Dim masterConnection As New System.Data.SqlClient.SqlConnection
    
        Public Sub New()
            MyBase.New()
    
            'This call is required by the Component Designer.
            InitializeComponent()
    
            'Add initialization code after the call to InitializeComponent
    
        End Sub
    
        Private Function GetSql(ByVal Name As String) As String
            Try
    
                ' Gets the current assembly.
                Dim Asm As [Assembly] = [Assembly].GetExecutingAssembly()
    
                ' Resources are named using a fully qualified name.
                Dim strm As Stream = Asm.GetManifestResourceStream( _
                  Asm.GetName().Name + "." + Name)
    
                ' Reads the contents of the embedded file.
                Dim reader As StreamReader = New StreamReader(strm)
                Return reader.ReadToEnd()
    
            Catch ex As Exception
                MsgBox("In GetSQL: " & ex.Message)
                Throw ex
            End Try
        End Function
    
        Private Sub ExecuteSql(ByVal DatabaseName As String, ByVal Sql As String)
            Dim Command As New SqlClient.SqlCommand(Sql, masterConnection)
    
            ' Initialize the connection, open it, and set it to the "master" database
            masterConnection.ConnectionString = My.Settings.masterConnectionString
            Command.Connection.Open()
            Command.Connection.ChangeDatabase(DatabaseName)
            Try
                Command.ExecuteNonQuery()
            Finally
                ' Closing the connection should be done in a Finally block
                Command.Connection.Close()
            End Try
        End Sub
    
        Protected Sub AddDBTable(ByVal strDBName As String)
            Try
                ' Creates the database.
                ExecuteSql("master", "CREATE DATABASE " + strDBName)
    
                ' Creates the tables.
                ExecuteSql(strDBName, GetSql("sql.txt"))
    
            Catch ex As Exception
                ' Reports any errors and abort.
                MsgBox("In exception handler: " & ex.Message)
                Throw ex
            End Try
        End Sub
    
        Public Overrides Sub Install(ByVal stateSaver As _
          System.Collections.IDictionary)
    
            MyBase.Install(stateSaver)
            AddDBTable(Me.Context.Parameters.Item("dbname"))
        End Sub
    
    End Class
    
  4. [ビルド] メニューの [DBCustomAction のビルド] をクリックします。

配置プロジェクトを作成するには

  1. [ファイル] メニューの [追加] をポイントし、[新しいプロジェクト] をクリックします。

  2. [新しいプロジェクトの追加] ダイアログ ボックスの [その他のプロジェクトの種類] ノードを開き、[プロジェクトの種類] ペインの [セットアップ/配置プロジェクト] をクリックします。次に、[テンプレート] ペインの [セットアップ プロジェクト] をクリックします。[プロジェクト名] ボックスに「DBCustomAction_Setup」と入力します。

  3. [プロパティ] ウィンドウで [ProductName] プロパティを選択し、「DB Installer」と入力します。

  4. ファイル システム エディタで、[アプリケーション フォルダ] を選択します。[操作] メニューの [追加] をポイントし、[プロジェクト出力] をクリックします。

  5. [プロジェクト出力グループの追加] ダイアログ ボックスで、DBCustomAction プロジェクトの [プライマリ出力] を選択します。

カスタム インストール ダイアログ ボックスを作成するには

  1. ソリューション エクスプローラで DBCustomAction_Setup プロジェクトを選択します。[表示] メニューの [エディタ] をポイントし、[ユーザー インターフェイス] をクリックします。

  2. ユーザー インターフェイス エディタで、[インストール] の下の [開始] ノードを選択します。[操作] メニューの [ダイアログの追加] をクリックします。

  3. [ダイアログの追加] ダイアログ ボックスで、[テキストボックス (A)] ダイアログ ボックスを選択し、[OK] をクリックします。

  4. [操作] メニューの [上へ移動] をクリックします。[テキストボックス (A)] ダイアログ ボックスが [インストール フォルダ] ノードの上に来るまで繰り返します。

  5. [プロパティ] ウィンドウで、[BannerText] プロパティを選択し、「Specify Database Name」と入力します。

  6. [BodyText] プロパティを選択し、「This dialog box enables you to specify the name of the database to be created on the database server」と入力します。

  7. [Edit1Label] プロパティを選択し、「Name of database:」と入力します。

  8. [Edit1Property] プロパティを選択し、「CUSTOMTEXTA1」と入力します。

  9. Edit2Visible、Edit3Visible、および Edit4Visible の各プロパティを選択し、それぞれに「False」を設定します。

カスタム動作を追加するには

  1. ソリューション エクスプローラで DBCustomAction_Setup プロジェクトを選択します。[表示] メニューの [エディタ] をポイントし、[カスタム動作] をクリックします。

  2. カスタム動作エディタで、[インストール] ノードを選択します。[操作] メニューの [カスタム動作の追加] をクリックします。

  3. [プロジェクトから項目を選択] ダイアログ ボックスで、[アプリケーション フォルダ] をダブルクリックします。

  4. [DBCustomAction (アクティブ) のプライマリ出力] を選択し、[OK] をクリックしてダイアログ ボックスを閉じます。

  5. カスタム動作エディタの [DBCustomAction (アクティブ) のプライマリ出力] が選択されていることを確認します。[プロパティ] ウィンドウで [CustomActionData] プロパティを選択し、「/dbname=[CUSTOMTEXTA1]」と入力します。

  6. [ビルド] メニューで [DBCustomAction_Setup のビルド] をクリックします。

開発用コンピュータにアプリケーションをインストールするには

  • ソリューション エクスプローラで DBCustomAction_Setup プロジェクトを選択します。[プロジェクト] メニューの [インストール] をクリックします。

    開発用コンピュータでインストーラが実行されます。

    49b92ztk.alert_note(ja-jp,VS.90).gifメモ :

    インストーラを実行するには、コンピュータ上でインストールを実行する権限が必要です。

別のコンピュータにアプリケーションを配置するには

  1. Windows エクスプローラで、プロジェクト ディレクトリに移動し、ビルドされたインストーラを探します。既定のパスは \documents and settings\yourloginname\DBCustomAction_Setup\project configuration\ DBCustomAction_Setup.msi です。既定では、project configuration は Debug になります。

  2. DBCustomAction_Setup.msi ファイル、およびディレクトリ内の他のファイルとサブディレクトリすべてを別のコンピュータにコピーします。

    49b92ztk.alert_note(ja-jp,VS.90).gifメモ :

    ネットワークに接続していないコンピュータにアプリケーションをインストールするには、ファイルを CD-ROM などの従来のメディアにコピーしてください。

    ターゲット コンピュータで、Setup.exe ファイルをダブルクリックしてインストーラを実行します。

    49b92ztk.alert_note(ja-jp,VS.90).gifメモ :

    インストーラを実行するには、コンピュータ上でインストールを実行する権限が必要です。

アプリケーションをアンインストールするには

  1. Windows の [コントロール パネル] で [アプリケーションの追加と削除] をダブルクリックします。

  2. [アプリケーションの追加と削除] ダイアログ ボックスの [DBCustomAction_Setup] をクリックし、[削除] をクリックします。次に、[OK] をクリックしてダイアログ ボックスを閉じます。

    49b92ztk.alert_note(ja-jp,VS.90).gifヒント :

    開発用コンピュータからアプリケーションをアンインストールするには、[プロジェクト] メニューの [アンインストール] をクリックします。

参照

概念

カスタム動作でのエラー処理

参照

CustomActionData プロパティ

その他の技術情報

配置でのカスタム動作の管理