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

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

注意

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

注意

お使いのマシンで、Visual Studio ユーザー インターフェイスの一部の要素の名前や場所が、次の手順とは異なる場合があります。 これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。 詳細については、「Visual Studio の設定」を参照してください。

注意

次の手順は、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 を選択します。 [プロパティ] ウィンドウで、[BuildAction] プロパティを [Embedded Resource] に設定します。

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

  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. Edit2VisibleEdit3Visible、および Edit4Visible の各プロパティを選択し、それぞれに**「False」**を設定します。

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

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

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

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

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

  5. カスタム動作エディター[DBCustomAction (アクティブ) のプライマリ出力] が選択されていることを確認します。 [プロパティ] ウィンドウで [CustomActionData] プロパティを選択し、「/dbname=[CUSTOMTEXTA1]」と入力します。 このデータは、インストールの最後に実行されるカスタム動作に渡されます。 詳細については、「CustomActionData プロパティ」を参照してください。

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

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

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

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

    注意

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

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

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

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

    注意

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

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

    注意

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

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

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

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

    ヒント

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

参照

参照

CustomActionData プロパティ

概念

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

その他の技術情報

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