msdn09_capa.JPG

Clique aqui para ler todos os artigos desta edição

 

Web Setup Project com o Visual Studio .Net
por Cristian Arrano

 

Lembro-me claramente como era o ato de fazer o deploy de uma aplicação web feita em asp 3.0, principalmente quando as regras de negócios eram encapsuladas em uma DLL desenvolvida com VB6. Com a chegada do .Net e do Visual Studio .Net, realizar o Deploy de uma aplicação se tornou um trabalho simples. Basta ter conhecimentos de copiar e colar, apesar de nem sempre ser esta a melhor solução, principalmente se algum dia sua aplicação for ser comercializada.

Neste artigo mostrarei como fazer o deployment de uma aplicação ASP.NET utilizando os recursos de criação de um instalador do Visual Studio Net. A aplicação terá um Web Form acessando dados armazenados em uma tabela em um banco de dados que também será criado durante a instalação da aplicação.

 

Banco de Dados

Para ilustrar o uso do banco de dados nesta aplicação, crie no SQL Server um banco de dados chamado AppDevBanco contendo uma tabela nomeada tblLivro com uma estrutura conforme a Figura 1 e insira uma massa de dados de teste.

 

image001.gif

Figura 1 – Estrutura da tabela tblLivro

Solução

Abra o Visual Studio e crie uma nova solução em branco. Selecione o menu File / New / Blank Solution e dê o nome de SlnWebProject. Adicione um projeto do tipo ASP.NET Web Application chamado WebApp, utilizando a linguagem Visual Basic .NET. Adicione um Web Form chamado principal.aspx que mostrará os registros da tabela do banco de dados criado anteriormente. Insira os seguintes controles: dois Labels (lblTitulo e lblErro) e um Datagrid (ID=dGridLivros), conforme a Figura 2.

 

image003.jpg

Figura 2 – Web Form principal.aspx

 

Pressione F7 para abrir a janela de código. Como iremos utilizar o SQL Server, insira na primeira linha da janela de códigos a referência à classe SqlClient.

 

Imports System.Data.SqlClient

 

Localize o evento Page_Load do Web Form (principal.aspx.vb) e digite o código da Listagem 1 que executa a stored procedure para ler os dados na tabela e preencher o DataGrid:

 

Listagem 1 – Código para preencher o DataGrid

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

If Not Page.IsPostBack Then

  Try

    'Define a conexão

    Dim objConn As New SqlConnection("server=localhost;database=AppDevBanco;trusted_connection=true")

    'Define a command

    Dim objComm As New SqlCommand("spTrazLivros", _

                                  objConn)

    'Abre a conexão

    objConn.Open()

    'Especifica que é uma stored procedure

    objComm.CommandType = CommandType.StoredProcedure

    'Define e executa o DataReader

    Dim dr As SqlDataReader = objComm.ExecuteReader(CommandBehavior.CloseConnection)

    'Preenche o Datagrid

    Me.dGridLivros.DataSource = dr

    Me.dGridLivros.DataBind()

  Catch ex As Exception

    Me.lblErro.Text = ex.Message

  End Try

End If

End Sub

 

Note que o SqlCommand (objComm) tem como string uma stored procedure que lista todos os campos da tabela tblLivro. Portanto, crie a stored procedure no SQL Server conforme a Listagem 2.

 

Listagem 2 – Conteúdo da Stored Procedure spTrazLivros

CREATE PROCEDURE spTrazLivros

AS

SELECT * FROM tblLivro

GO

 

No Visual Studio, abra o Solution Explorer, clique com o botão direito sobre a página principal.aspx e selecione a opção Set As Start Page. Isto faz com que esta página seja aberta quando a aplicação for chamada. Salve a página e selecione o meu Build / Build Solution para compilar. Por fim, selecione o menu Debug / Start para executar a página. Outra opção é pressionar CTRL + F5 para salvar, compilar e executar a página automaticamente. Veja o resultado no browser e certifique-se que o Datagrid é preenchido com todos os dados cadastrados na tabela.

 

Classes de Instalação

 

Agora que temos a aplicação ASP.NET, criaremos um projeto do tipo Class Library cujo objetivo é a instalação do banco de dados que será realizada via script SQL. Para criar um projeto do tipo Class Library no Visual Studio, selecione o menu File / New Project, escolha o tipo Class Library e coloque o nome cLibWebSetupDemo, como mostra a Figura 3. Escolha Add to Solution e clique em Ok para criar o projeto.

 

image005.jpg

Figura 3 – Novo Projeto Class Library

 

Insira ao projeto um novo item do tipo Installer Class (cDefault.vb), ilustrado na Figura 4.

 

image007.jpg

Figura 4 – Installer Class

 

A classe System.Configuration.Install.Installer é a principal classe para todas as instalações personalizadas que são realizadas no .Net Framework. Para a construção da classe que irá instalar o script do banco de dados, criaremos uma conexão ao banco de dados utilizando o objeto SqlConnection da Toolbox, como mostra a Figura 5. Portanto, selecione o menu View / Toolbox (Ctrl + Alt + X) e arraste para o documento o SqlConnection, localizado na aba Data.

 

image008.gif

Figura 5 – SqlConnection na Toolbox

 

Selecione o objeto e pressione F4 para exibir a janela de propriedades. Na propriedade ConnectionString, abra o dropdown e selecione a opcao . Será exibida a janela com as propriedades da conexão, conforme a Figura 6.

 

image009.gif

Figura 6 – Propriedades da conexao ao banco de dados

 

Digite (local) para o nome do servidor. Isso significa que o banco de dados estará na maquina local. É importante que a conexão tenha como mecanismo de logon a segurança integrada do Windows (Windows NT Integrated Security), para que no momento da execução do script não tenhamos nenhum problema com autenticação. Selecione o banco de dados master. Clique no botão “Testar conexão” para efetivar o teste e, se não houver problemas clique em Ok.

A seguir, iremos digitar os códigos dos métodos. Presione a tecla F7 para exibir a janela de códigos da classe. Logo após o bloco “Component Designer generated code”, crie os métodos Install e Uninstall. O método Install executa todas as ações necessárias para instalar o script e o método Uninstall executa as ações para desinstalar a aplicação, conforme Listagem 3.

 

Listagem 3 – Conteúdo dos metodos Install e Unistall

Public Overrides Sub Install( _

  ByVal stateSaver As System.Collections.IDictionary)

  MyBase.Install(stateSaver)

  Dim strFileName As String

  Dim Command As New SqlClient.SqlCommand

  Dim strTarget As String = Me.Context.Parameters.Item("strTarg")

  Dim sLine As String

  Dim strDelimiter As String = "#"

  Dim i As Integer

  Try

     strFileName = strTarget

     Dim Reader As System.IO.StreamReader = System.IO.File.OpenText(strFileName)

     Dim splitOut = Split(Reader.ReadToEnd(), _

                          strDelimiter)

     Command.Connection = SqlConnection1

     Command.Connection.Open()

     For i = 0 To UBound(splitOut)

         If splitOut(i) <> "" Then

            Command.CommandText = splitOut(i)

            Command.ExecuteNonQuery()

         End If

     Next

  Catch ex As Exception

     System.Windows.Forms.MessageBox.Show("Erro ao tentar instalar o banco de dados: " & ex.Message)

     Throw ex

  Finally

     Command.Connection.Close()

  End Try

End Sub

 

Public Overrides Sub Uninstall( _

 ByVal stateserver As System.Collections.IDictionary)

  MyBase.Uninstall(stateserver)

  Dim Command As New SqlClient.SqlCommand

  Command.CommandText = "USE MASTER DROP DATABASE [AppDevBanco]"

  Try

     Command.Connection = SqlConnection1

     Command.Connection.Open()

     Command.ExecuteNonQuery()

  Catch ex As Exception

     System.Windows.Forms.MessageBox.Show("Erro ao tentar desinstalar o banco de dados: " & ex.Message)

     Throw ex

  Finally

     Command.Connection.Close()

  End Try

  System.Windows.Forms.MessageBox.Show("Banco de dados desinstalado com sucesso.")

End Sub

 

O método Install lê o arquivo de script através de um StreamReader e vai executando cada linha do arquivo separado por um delimitador (#).  Note que a linha “Me.Context.Parameters.Item("strTarg")” referencia o arquivo script que será executado. Com a criação do Web Setup Project, poderemos configurar o valor da variável de contexto.

 

Web Setup Project

 

Agora que temos a aplicação ASP.NET e a classe de Instalação, precisamos colocar todo o conteúdo de ambas as aplicações em um projeto do tipo Web Setup. Para inserir um projeto do tipo Web Setup na solução, clique em File / New Project / Setup and Deployment Projects / Web Setup Project. Coloque como nome do projeto AppDevBancoSetup. Escolha Add to Solution e clique em Ok.

A seguir é preciso inserir os arquivos das aplicações (ASP.NET e Class Library). Portanto, no Solution Explorer, pressione o botão direito do mouse sobre o nome do projeto, escolha a opção Add / Project Output. Será exibida uma janela semelhante a Figura 7.

 

image011.jpg

Figura 7 – Add Project Output Group

 

Escolha a opção Primary Output e clique em Ok. Repita a operação para o projeto cLibWebSetupDemo.

Agora todos os arquivos de ambos os projetos estão virtualmente inseridos no Web Setup Project. Caso seja feita alguma modificação em algum projeto fonte, não será necessário excluir e inserir novamente. Vale destacar que somente serão instalados os arquivos .aspx da aplicação Web.

Para ver os arquivos que serão instalados, selecione a opção View / Editor / File System. Note que aparecerá uma pasta chamada Web Application Folder, conforme a Figura 8.

 

image012.gif

Figura 8 – File System

 

Com o botão direito sobre o Web Application Folder, selecione propriedades e configure para a instalação da aplicação ASP.NET, como mostra a Figura 9.

 

image013.gif

Figura 9 – Propriedades da Web Application Folder

 

As principais propriedades são VirtualDirectory e DefaultDocument. A primeira especifica o nome do diretorio virtual que será criado no IIS (Internet Information Server), portanto, todo o trabalho de criação da pasta virtual no IIS e no Windows será realizado pelo instalador. A segunda propriedade especifica o arquivo Startup da aplicação ASP.NET. No caso o DefaultDocument será principal.aspx, que é o web form criado anteriormente no projeto ASP.NET.

Para configurar o valor da variável de contexto mencionado anteriormente, selecione no Solution Explorer a opção View / Custom Actions. Na pasta Install, selecione Primary output from cLibWebSetupDemo. Com o botao direito selecione a caixa de propriedades, localize o atributo CustomActionData e escreva a seguinte linha:

 

/strTarg=[TARGETDIR]sql.txt

 

O atributo CustomActionData permite armazenar informações sobre o processo de instalação da aplicação. Neste caso, o arquivo sql.txt estará localizado fisicamente onde a aplicação for instalada.

Com o Word ou Wordpad crie um arquivo RTF chamado License.rtf e um arquivo de texto chamado Readme.txt. Salve-os e insira-os no Web Setup Project. Para isso, basta escolher a opção Add / File com o botão direito sobre o nome do projeto no Solution Explorer.

O arquivo de criação do banco de dados também será inserido no projeto. Como este arquivo é extenso, não será detalhado aqui, mas está disponível para download no site da MSDN Magazine. O próximo passo é fazer com que antes que a instalação da aplicação seja executada, o usuário aceite os termos de instalação do software. Para isso, selecione a opção View / User Interface com o botão direito em cima do nome do projeto no Solution Explorer. É exibida uma tela semelhante à Figura 10.

 

image014.gif

Figura 10 – Tela do User Interface

 

Com o botão direito sobre Install / Start, selecione a opção Add Dialog. Escolha License Agreement e logo após clique em Ok. No quadro de propriedades, no atributo LicenseFile, selecione o arquivo License.rtf.

Crie uma pasta no menu de Programas do Windows. Para isso, selecione a opção View / File System no Solution Explorer. Com o botão direito sobre File System on Target Project, selecione Add Special Folder / User’s Programs Menu. Insira uma nova pasta chamada AppDevBanco, abaixo da pasta User’s Programs Menu. Selecione a opção Add / File para inserir o arquivo readme.txt.

 

Build

A aplicação Web Setup Project está pronta para ser compilada, o que significa que todos os arquivos da aplicação ASP.NET e da Class Library estarão em um executável .msi. Para executar o Build da aplicação, selecione a opção Build / Configuration Manager e escolha Release no Active Solution Configuration. Com o mouse sobre o nome da aplicação, selecione com o botão direito a opção Build, conforme mostra a Figura 11.

 

image015.gif

Figura 11 – Build da Aplicacao Web Setup Project

 

O arquivo de instalação estará localizado na pasta Release do projeto, como por exemplo: “C:\Visual Studio Projects\AppDevBanco\AppDevBancoSetup\Release”.

 

Conclusão

Neste artigo utilizei o Visual Studio .Net para criar uma aplicação do tipo Web Setup Project com o objetivo de criar um instalador para aplicações ASP.NET, passando pela criação automatizada do banco de dados até a criação das pastas e arquivos no IIS e no Windows.

Sem dúvida a facilidade de customização e utilização do Visual Studio .Net é o diferencial, já que praticamente todo o trabalho é feito de maneira visual.