`
lovnet
  • 浏览: 6880987 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

.NET平台下WEB应用程序的部署(安装数据库和自动配置)

阅读更多
.NET平台下WEB应用程序的部署(安装数据库和自动配置)
李洪根

.NET平台下,部署 Web 解决方案是比较方便的。我们可以利用Visual Studio.NET 2003添加一个WEB安装项目,在部署的“文件系统编辑器”中添加项目的主输出和内容文件,非常简易地完成安装程序的制作。

但是,这样制作的安装程序,只是将Web页和ASP.NET程序编译的DLL文件安装到目标机器的IIS目录,对于一般的应用程序是可以的(比如用Access数据库,可以一起打包到安装程序中);如果数据库是SQL SERVER,需要在部署的时候一并安装数据库,安装程序的制作就会复杂一些,需要我们自定义安装程序类。在安装程序类中执行SQL脚本并将连接字符串写入Web.config

l 安装数据库

微软MSDN上介绍过在部署应用程序的时候建立数据库。如:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vsintro7/html/vxwlkWalkthroughUsingCustomActionToCreateDatabaseDuringInstallation.asp

这种方法是创建一个安装程序类,在安装程序类中调用ADO.NET执行SQL 语句(SQL语句放在一个文本文件中)来创建数据库。

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

但是,这种方法有一个问题,如果用SQL Server2000生成了所有建表、视图、存储过程的一个脚本文件,用ADO.NET来执行这个脚本文件,就会因为脚本中有许多“GO”语句而出现错误。当然,我们可以把“GO”替换成换行符,利用ADO.NET一条条执行SQL 语句。很显然,这样的效率比较低。

最好的办法是调用osql执行脚本。(或者创建一个数据库项目的cmd文件,而cmd文件建立数据库的时候也是调用的osql)。

首先,我们新建一个ASP.NET Web应用程序,http://localhost/VbNetTest,并打开VbNetTest 项目

创建部署项目
1. 在“文件”菜单上指向“添加项目”,然后选择“新建项目”。
2. 在“添加新项目”对话框中,选择“项目类型”窗格中的“安装和部署项目”,然后选择“模板”窗格中的“Web 安装项目”。在“名称”框中键入 Test Installer。
3. 单击“确定”关闭对话框。
4. 项目被添加到解决方案资源管理器中,并且文件系统编辑器打开。
5. 在“属性”窗口中,选择 ProductName 属性,并键入 GCRM。
VbNetTest项目的输出添加到部署项目中
1. 在“文件系统编辑器”中,选择“Web 应用程序”文件夹。在“操作”菜单上,指向“添加”,然后选择“项目输出”。
2. 在“添加项目输出组”对话框中,选择“项目”下拉列表中的“VbNetTest”。
3. 单击“确定”关闭对话框。
4. 从列表中选择“主输出”和“内容文件”组,然后单击“确定”。
创建安装程序类
1. 在“文件”菜单上指向“新建”,然后选择“项目”。
2. 在“新建项目”对话框中,选择“项目类型”窗格中的“Visual Basic 项目”,然后选择“模板”窗格中的“类库”。在“名称”框中键入 DBCustomAction。
3. 单击“打开”关闭对话框。
4. 从“项目”菜单中选择“添加新项”。
5. 在“添加新项”对话框中选择“安装程序类”。在“名称”框中键入 DBCustomAction。
6. 单击“确定”关闭对话框。
创建自定义安装对话框
1. 在解决方案资源管理器中选择“Test Installer”项目。在“视图”菜单上指向“编辑器”,然后选择“用户界面”。
2. 在用户界面编辑器中,选择“安装”下的“启动”节点。在“操作”菜单上,选择“添加对话框”。
3. 在“添加对话框”对话框中,选择“许可协议”对话框,然后单击“确定”关闭对话框。
4. 在“添加对话框”对话框中,选择“文本框 (A)”对话框,然后单击“确定”关闭对话框。
5. 在“操作”菜单上,选择“上移”。重复此步骤,直到“文本框 (A)”对话框位于“安装文件夹”节点之上。
6. 在“属性”窗口中,选择 BannerText 属性并键入:安装数据库.。
7. 选择 BodyText 属性并键入:安装程序将在目标机器上安装数据库。
8. 选择 Edit1Label 属性并键入:数据库名称:。
9. 选择 Edit1Property 属性并键入 CUSTOMTEXTA1。
10. 选择 Edit1Value 属性并键入:GsCrm。
11. 选择 Edit2Label 属性并键入:服务器名:。
12. 选择 Edit2Property 属性并键入 CUSTOMTEXTA2。
13. 选择 Edit2Value 属性并键入:(local)。
14. 选择 Edit3Label 属性并键入:用户名:。
15. 选择 Edit3Value 属性并键入:sa。
16. 选择 Edit3Property 属性并键入 CUSTOMTEXTA3。
17. 选择 Edit4Label 属性并键入:密码:。
18. 选择 Edit4Property 属性并键入 CUSTOMTEXTA4。
19. 选择 Edit2Visible、Edit3Visible 和 Edit4Visible 属性,并将它们设置为 False。
创建自定义操作
1. 在解决方案资源管理器中选择“Test Installer”项目。在“视图”菜单上指向“编辑器”,然后选择“自定义操作”。
2. 在自定义操作编辑器中选择“安装”节点。在“操作”菜单上,选择“添加自定义操作”。
3. 在“选择项目中的项”对话框中,双击“应用程序文件夹”。
4. 选择“主输出来自 DBCustomAction(活动)”项,然后单击“确定”关闭对话框。
5. 在“属性”窗口中,选择 CustomActionData 属性并键入 /dbname=[CUSTOMTEXTA1] /server=[CUSTOMTEXTA2] /user=[CUSTOMTEXTA3] /pwd=[CUSTOMTEXTA4] /targetdir="[TARGETDIR]\"。
附/targetdir="[TARGETDIR]\"是安装后的目标路径,为了在DBCustomAction类中获得安装后的路径,我们设置此参数。
另外,安装后的路径也可以通过Reflection得到:
Dim Asm As System.Reflection.Assembly = _
System.Reflection.Assembly.GetExecutingAssembly
MsgBox("Asm.Location")
添加文件
1. 将SQL Server生成的脚本文件DB.sql添加到“Test Installer”项目
2. 将安装文件LisenceFile.rtf添加到“Test Installer”项目
3. 在用户界面编辑器中,选择许可协议,设置LisenceFile属性为LisenceFile.rtf文件
工程中的文件 :
将代码添加到安装程序类中,DBCustomAction.vb类

Imports System.ComponentModel

Imports System.Configuration.Install

Imports System.IO

Imports System.Reflection

<RunInstaller(True)> Public Class DBCustomAction

Inherits System.Configuration.Install.Installer

#Region "组件设计器生成的代码 "

Public Sub New()

MyBase.New()

'该调用是组件设计器所必需的

InitializeComponent()

' InitializeComponent() 调用之后添加任何初始化

End Sub

' Installer 重写 dispose 以清理组件列表。

Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)

If disposing Then

If Not (components Is Nothing) Then

components.Dispose()

End If

End If

MyBase.Dispose(disposing)

End Sub

Private components As System.ComponentModel.IContainer

<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

End Sub

#End Region

'执行SQL 语句

Private Sub ExecuteSql(ByVal conn As String, ByVal DatabaseName As String, ByVal Sql As String)

Dim mySqlConnection As New SqlClient.SqlConnection(conn)

Dim Command As New SqlClient.SqlCommand(Sql, mySqlConnection)

Command.Connection.Open()

Command.Connection.ChangeDatabase(DatabaseName)

Try

Command.ExecuteNonQuery()

Finally

'Close Connection

Command.Connection.Close()

End Try

End Sub

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

MyBase.Install(stateSaver)

' ------------------------建立数据库-------------------------------------------------

Try

Dim connStr As String = String.Format("data source={0};user id={1};password={2};persist security info=false;packet size=4096", Me.Context.Parameters.Item("server"), Me.Context.Parameters.Item("user"), Me.Context.Parameters.Item("pwd"))

'根据输入的数据库名称建立数据库

ExecuteSql(connStr, "master", "CREATE DATABASE " + Me.Context.Parameters.Item("dbname"))

'调用osql执行脚本

Dim sqlProcess As New System.Diagnostics.Process

sqlProcess.StartInfo.FileName = "osql.exe "

sqlProcess.StartInfo.Arguments = String.Format(" -U {0} -P {1} -d {2} -i {3}db.sql", Me.Context.Parameters.Item("user"), Me.Context.Parameters.Item("pwd"), Me.Context.Parameters.Item("dbname"), Me.Context.Parameters.Item("targetdir"))

sqlProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden

sqlProcess.Start()

sqlProcess.WaitForExit() '等待执行

sqlProcess.Close()

'删除脚本文件

Dim sqlFileInfo As New System.IO.FileInfo(String.Format("{0}db.sql", Me.Context.Parameters.Item("targetdir")))

If sqlFileInfo.Exists Then

sqlFileInfo.Delete()

End If

Catch ex As Exception

Throw ex

End Try

' ---------------------将连接字符串写入Web.config-----------------------------------

Try

Dim FileInfo As System.IO.FileInfo = New System.IO.FileInfo(Me.Context.Parameters.Item("targetdir") & "\web.config")

If Not FileInfo.Exists Then

Throw New InstallException("没有找到配置文件")

End If

'实例化XML文档

Dim XmlDocument As New System.Xml.XmlDocument

XmlDocument.Load(FileInfo.FullName)

'查找到appSettings中的节点

Dim Node As System.Xml.XmlNode

Dim FoundIt As Boolean = False

For Each Node In XmlDocument.Item("configuration").Item("appSettings")

If Node.Name = "add" Then

If Node.Attributes.GetNamedItem("key").Value = "connString" Then

'写入连接字符串

Node.Attributes.GetNamedItem("value").Value = String.Format("Persist Security Info=False;Data Source={0};Initial Catalog={1};User ID={2};Password={3};Packet Size=4096;Pooling=true;Max Pool Size=100;Min Pool Size=1", _

Me.Context.Parameters.Item("server"), Me.Context.Parameters.Item("dbname"), Me.Context.Parameters.Item("user"), Me.Context.Parameters.Item("pwd"))

FoundIt = True

End If

End If

Next Node

If Not FoundIt Then

Throw New InstallException("web.Config 文件没有包含connString连接字符串设置")

End If

XmlDocument.Save(FileInfo.FullName)

Catch ex As Exception

Throw ex

End Try

End Sub

End Class

最后编译生成!
安装界面:
声明:本文版权与解释权归李洪根所有,如需转载,请保留完整的内容及此声明。
QQ: 21177563 MSN: lihonggen@hotmail.com
分享到:
评论

相关推荐

    .NET平台下Web程序设计实例代码

    在.NET平台上进行Web程序设计,开发者通常会利用微软提供的ASP.NET框架,这是一个强大的工具集,用于构建动态网站、Web应用程序和服务。本实例代码库聚焦于.NET环境下的Web开发实践,旨在帮助初学者和有经验的开发者...

    《ASP.net交互式Web数据库程序设计》配盘文件

    9. **部署和配置**:ASP.NET应用程序可以方便地部署到IIS服务器上,并通过web.config文件进行灵活的配置。 配盘文件中的"说明.htm"可能包含详细的操作指南或教程,帮助读者了解如何使用书中的示例代码。"代码中国....

    基于VB.NET的Web应用程序设计

    7. **部署和配置**:学习如何将VB.NET Web应用程序部署到IIS服务器,并进行必要的配置。 8. **错误处理和调试**:掌握VB.NET中的异常处理,以及如何使用Visual Studio进行Web应用的调试。 9. **性能优化**:讨论...

    ASP.NET Web应用程序开发

    综上所述,ASP.NET Web应用程序开发是一个涉及广泛技术和工具的领域,涵盖从设计、编码、测试到部署的全过程,旨在帮助开发者构建高效、安全且具有高度可伸缩性的Web应用。通过学习和掌握这些知识点,开发人员能够在...

    asp.net配置web.config数据库连接

    在ASP.NET开发中,Web.config文件扮演着至关重要的角色,它是应用程序的配置文件,其中包含了应用程序运行时所需的各种设置。数据库连接配置是其中的关键部分,它允许应用与数据库进行交互。下面将详细介绍如何在ASP...

    用ADO.NET和XML Web服务构建Web应用程序(PDF)

    系统介绍了用XML Web服务构建Web应用程序的知识。首先概述了有关Web服务的基础知识,然后借助一个具体的业务模型,详细介绍了为项目建模、创建与部署Web服务、以及保护Web服务安全和性能优化等高级技术;由于书中的...

    面向.NET的Web应用程序设计-微软考证

    在.NET框架下,面向Web应用程序的设计是开发高效、可扩展且易于维护的互联网应用的关键。微软认证是评估和证明开发者在这一领域技能的重要途径。本文将深入探讨.NET平台下的Web应用设计原理,以及如何通过微软认证来...

    NET平台下WEB应用程序的部署

    ### .NET平台下的WEB应用程序部署知识点 #### 一、概述 .NET平台提供了强大的支持来简化Web应用程序的部署过程。在这一平台中,开发者可以利用Visual Studio.NET 2003等工具来创建易于安装和管理的Web解决方案。...

    .NET环境下数据库应用系统

    **.NET框架**是微软推出的用于构建、部署和运行XML Web服务以及各种应用程序(如Windows应用、Web应用和移动设备应用)的编程模型。它位于操作系统之上,为应用程序提供基础服务,主要由两部分构成: 1. **公共语言...

    如何使用ASP.NET开发MobileWeb应用

    ASP.NET是一种强大的Web应用程序框架,由微软公司推出,主要用于构建动态、数据驱动的Web应用程序。在移动互联网时代,ASP.NET同样能够支持开发适应各种移动设备的Mobile Web应用。本篇文章将详细探讨如何利用ASP...

    ASP.NET数据库应用程序开发教程

    ASP.NET是一种由微软开发的服务器端Web应用框架,主要用于构建动态网站、Web应用程序和服务。它提供了丰富的工具和功能,使得开发者能够高效地构建与数据库交互的Web应用。本教程将深入探讨如何使用ASP.NET进行...

    asp.net web应用程序设计教程

    9. **部署和配置**:学习如何在IIS(Internet Information Services)上部署ASP.NET应用,以及如何配置Web.config文件以调整应用的行为。 10. **调试和错误处理**:了解如何使用Visual Studio等工具进行调试,以及...

    .NET WEB应用程序打包过程指导

    .NET WEB应用程序打包过程指导 在本篇文章中,我们将详细介绍如何将.NET Web应用...通过本篇文章,我们可以学习到如何将.NET Web应用程序打包为安装文件,并设置安装过程的各个步骤和条件,以便更好地控制安装过程。

    ASP.NET Web应用程序开发新思维(英文版)

    ASP.NET是微软公司推出的一种用于构建Web应用程序的框架,它基于.NET Framework,为开发者提供了丰富的功能和工具,简化了Web应用的开发流程。本资源"ASP.NET Web应用程序开发新思维(英文版)"是一本深入探讨ASP.NET...

    VS.net2005程序部署安装

    【VS.NET 2005程序部署安装...总的来说,VS.NET 2005的部署功能使得开发者能够高效地将应用程序交付给用户,确保其在各种环境下的稳定运行。通过理解并熟练掌握这些部署方法,开发者可以提高软件产品的质量和用户体验。

    ASP.NET2.0 Web数据库开发教程

    ASP.NET 2.0 Web数据库开发教程是一门深入学习如何在ASP.NET环境中构建与数据库交互的Web应用程序的课程。这门教程可能包含了多种技术、工具和最佳实践,旨在帮助开发者熟练掌握利用ASP.NET 2.0框架进行Web数据库...

    将.NET安装程序部署到SQL Server数据库

    通过以上步骤,我们可以有效地将.NET安装程序部署到SQL Server数据库,不仅提高了应用程序的部署效率,还确保了数据库的正确初始化和持续的维护。这一流程对于构建稳定、高效的应用系统至关重要,值得每一个IT专业...

    【ASP.NET编程知识】IIS部署ASP.NET5的实现步骤.docx

    【ASP.NET编程知识】IIS部署ASP.NET5的实现步骤主要涵盖了如何在Windows Server环境下,利用IIS服务器来部署和管理ASP.NET Core应用程序。本文档适用于熟悉.NET开发,特别是对ASP.NET Core 5有一定了解的开发者,...

    用ADO.NET和XML Web服务构建Web应用程序

    系统介绍了用XML Web服务构建Web应用程序的知识。首先概述了有关Web服务的基础知识,然后借助一个具体的业务模型,详细介绍了为项目建模、创建与部署Web服务、以及保护Web服务安全和性能优化等高级技术;由于书中的...

Global site tag (gtag.js) - Google Analytics