zoukankan      html  css  js  c++  java
  • Asp.net与SQL一起打包部署安装(收集)

    Asp.net与SQL一起打包部署安装(收集)
    Asp.net与SQL一起打包部署安装
     借鉴MSDN webcasts的Asp.net程序部署和李洪根的一篇文章,然后加上自己的亲身体会,把整个SQL和Asp.net(vb.net)一起打包的全过程写一下。
    一.准备必要的文件
    1. SQL脚本文件,生成以后安装过程中需要的表和存储过程等等;

    生成之后,就暂时把它命名为db.sql(注意大小写)
    2.LisenceFile.rtf的安装文件,因为我的系统是个人的,而且free的,所以就没有做。这个以后也是要用到的。
    二.在自己现有的项目里面创建部署项目:
    1. 在文件菜单上指向添加项目,然后选择新建项目。(图1-2)
    2. 在添加新项目对话框中,选择项目类型窗格中的安装和部署项目,然后选择模板窗格中的Web 安装项目。在名称框中键入 Test Installer。(图1-3)
    3. 单击确定关闭对话框。
    4. 项目被添加到解决方案资源管理器中,并且文件系统编辑器打开。
    5. 在属性窗口中,选择 ProductName 属性,并键入 GCRM。

    (1-2)

    (图1-3)其他项目的作用可以参考Webcast
    三。将 VbNetTest项目的输出添加到部署项目中(假如你的虚拟目录是SQLANDASPNet)
    1. 在文件系统编辑器中,选择Web 应用程序文件夹"。在操作菜单上,指向添加,然后选择项目输出。(图1-4)
    2. 在添加项目输出组对话框中,选择项目下拉列表中的SQLANDASPNet。
    3. 单击确定关闭对话框。
    4. 从列表中选择主输出和内容文件组,然后单击确定。(图1-5)

    (图1-4)

    (图1-5)其他的作用可以参考webcast,源文件就是所有项目的的文件
    四.

    创建自定义安装对话框
    1. 在解决方案资源管理器中选择Test Installer项目。在视图菜单上指向编辑器,然后选择用户界面。 (图1-6)
    2. 在用户界面编辑器中,选择安装下的启动节点。在操作菜单上,选择添加对话框。
    3. 在添加对话框对话框中,选择许可协议对话框,然后单击确定关闭对话框。 (注:我没有添加,因为暂时我还是不需要,需要的要添加一下哦)
    4. 在添加对话框对话框中,选择文本框 (A)对话框,然后单击确定关闭对话框。 (图1-7)
    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 ,并将它们设置为 False。(图1-8)

    (图1-7)


    (图1-8)


    (五).创建自定义操作
    1. 在解决方案资源管理器中选择Test Installer项目。在视图菜单上指向编辑器,然后选择自定义操作。(图1-9)
    2. 在自定义操作编辑器中选择安装节点。在操作菜单上,选择添加自定义操作。
    3. 在选择项目中的项对话框中,双击应用程序文件夹。
    4. 选择主输出来自 DBCustomAction(活动)项,然后单击确定关闭对话框。
    5. 在属性窗口中,选择 CustomActionData 属性并键入 /dbname=[CUSTOMTEXTA1] /server=[CUSTOMTEXTA2] /user=[CUSTOMTEXTA3] /pwd=[CUSTOMTEXTA4] /targetdir="[TARGETDIR]\"。 (图1-10)

    附/targetdir="[targetdir]\"是安装后的目标路径,为了在dbcustomaction类中获得安装后的路径,我们设置此参数。
    另外,安装后的路径也可以通过Reflection得到:
    Dim Asm As System.Reflection.Assembly = _
    System.Reflection.Assembly.GetExecutingAssembly
    MsgBox("Asm.Location")

    (图1-9)

    (图1-10)
    呵呵,已经好多了,剩下来的是关键性步骤,我花了好多时间研究。
    (六)创建安装程序类
    1. 在文件菜单上指向新建,然后选择项目。
    2. 在新建项目对话框中,选择项目类型窗格中的Visual Basic 项目,然后选择模板窗格中的类库。在名称框中键入 DBCustomAction。
    3. 单击打开关闭对话框。
    4. 从项目菜单中选择添加新项。
    5. 在添加新项对话框中选择安装程序类。在名称框中键入 DBCustomAction。
    6. 单击确定关闭对话框。(图1-11,1-12)
    注:这里是在原来的项目上建立一个简单的安装文件就可以了。

    (图1-11)
    添加后的效果图:

    (图1-12)这里的sql文件是要等一下添加的
    (七)
    添加文件
    1. 将SQL Server生成的脚本文件db.sql添加到Test Installer项目(图1-12)
    2. 将安装文件LisenceFile.rtf添加到Test Installer项目
    3. 在用户界面编辑器中,选择许可协议,设置LisenceFile属性为LisenceFile.rtf文件
    (八)
    一下的代码是整个部署的最重要的一部分了


    将代码添加到安装程序类中,dbcustomaction.vb类


    1ImportsSystem.ComponentModel
    2
    3importsSystem.Configuration.Install
    4
    5importsSystem.IO
    6
    7importsSystem.Reflection
    8
    9
    10
    11<runinstaller(true)>PublicClassDBCustomActionClassDBCustomAction
    12
    13inheritsSystem.Configuration.Install.Installer
    14
    15
    16
    17组件设计器生成的代码#region"组件设计器生成的代码"
    18
    19publicSubNew()SubNew()
    20
    21mybase.new()
    22
    23'该调用是组件设计器所必需的
    24
    25initializecomponent()
    26
    27'在InitializeComponent()调用之后添加任何初始化
    28
    29endSub
    30
    31'Installer重写dispose以清理组件列表。
    32
    33protectedOverloadsOverridesSubDispose()SubDispose(ByValdisposingAsBoolean)
    34
    35ifdisposingThen
    36
    37ifNot(componentsIsNothing)Then
    38
    39components.dispose()
    40
    41endIf
    42
    43endIf
    44
    45mybase.dispose(disposing)
    46
    47endSub
    48
    49privatecomponentsAsSystem.ComponentModel.IContainer
    50
    51<system.diagnostics.debuggerstepthrough()>PrivateSubInitializeComponent()SubInitializeComponent()
    52
    53endSub
    54
    55#endRegion
    56
    57'执行sql语句
    58
    59privateSubExecuteSql()SubExecuteSql(ByValconnAsString,ByValDatabaseNameAsString,ByValSqlAsString)
    60
    61dimmySqlConnectionAsNewSqlClient.SqlConnection(conn)
    62
    63dimCommandAsNewSqlClient.SqlCommand(Sql,mySqlConnection)
    64
    65command.connection.open()
    66
    67command.connection.changedatabase(databasename)
    68
    69try
    70
    71command.executenonquery()
    72
    73finally
    74
    75'closeConnection
    76
    77command.connection.close()
    78
    79endTry
    80
    81endSub
    82
    83publicOverridesSubInstall()SubInstall(ByValstateSaverAsSystem.Collections.IDictionary)
    84MyBase.Install(stateSaver)
    85
    86'------------------------建立数据库-------------------------------------------------
    87
    88try
    89
    90dimconnStrAsString=String.Format("datasource={0};userid={1};password={2};persistsecurityinfo=false;packetsize=4096",Me.Context.Parameters.Item("server"),Me.Context.Parameters.Item("user"),Me.Context.Parameters.Item("pwd"))
    91
    92'根据输入的数据库名称建立数据库
    93
    94executesql(connstr,"master","CreateDATABASE"+Me.Context.Parameters.Item("dbname"))
    95
    96'调用osql执行脚本
    97
    98dimsqlProcessAsNewSystem.Diagnostics.Process
    99
    100sqlprocess.startinfo.filename="osql.exe"
    101
    102sqlprocess.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"))
    103
    104sqlprocess.startinfo.windowstyle=ProcessWindowStyle.Hidden
    105
    106sqlprocess.start()
    107
    108sqlprocess.waitforexit()'等待执行
    109
    110sqlprocess.close()
    111
    112'删除脚本文件
    113
    114dimsqlFileInfoAsNewSystem.IO.FileInfo(String.Format("{0}db.sql",Me.Context.Parameters.Item("targetdir")))
    115
    116ifsqlFileInfo.ExistsThen
    117
    118sqlfileinfo.delete()
    119
    120endIf
    121
    122catchexAsException
    123
    124throwex
    125
    126endTry
    127
    128
    129
    130'---------------------将连接字符串写入Web.config-----------------------------------
    131
    132try
    133
    134dimFileInfoAsSystem.IO.FileInfo=NewSystem.IO.FileInfo(Me.Context.Parameters.Item("targetdir")&"\web.config")
    135
    136ifNotFileInfo.ExistsThen
    137
    138throwNewInstallException("没有找到配置文件")
    139
    140endIf
    141
    142'实例化xml文档
    143
    144dimXmlDocumentAsNewSystem.Xml.XmlDocument
    145
    146xmldocument.load(fileinfo.fullname)
    147
    148
    149
    150'查找到appsettings中的节点
    151
    152dimNodeAsSystem.Xml.XmlNode
    153
    154dimFoundItAsBoolean=False
    155
    156forEachNodeInXmlDocument.Item("configuration").Item("appSettings")
    157
    158ifNode.Name="add"Then
    159
    160ifNode.Attributes.GetNamedItem("key").Value="connString"Then
    161
    162'写入连接字符串
    163
    164node.attributes.getnameditem("value").value=String.Format("PersistSecurityInfo=False;DataSource={0};InitialCatalog={1};UserID={2};Password={3};PacketSize=4096;Pooling=true;MaxPoolSize=100;MinPoolSize=1",_
    165
    166me.context.parameters.item("server"),Me.Context.Parameters.Item("dbname"),Me.Context.Parameters.Item("user"),Me.Context.Parameters.Item("pwd"))
    167
    168foundit=True
    169
    170endIf
    171
    172endIf
    173
    174nextNode
    175
    176ifNotFoundItThen
    177
    178throwNewInstallException("web.Config文件没有包含connString连接字符串设置")
    179
    180endIf
    181
    182xmldocument.save(fileinfo.fullname)
    183
    184catchexAsException
    185
    186throwex
    187
    188endTry
    189
    190endSub
    191
    192endClass
    193
    194
    有点难度的就是那个Process类,它调用了osql.exe程序,来执行sql语句osql -U,-P,,-d,-i。
    web.config的修改代码是利用xml的语法实现。不是很难理解。
    最后编译生成!如图:


    安装界面:如图

    哈哈,总算写完了,也不知道有没有写好。
    最后还是感谢李洪根老师和微软的讲师。结合他们的共同的经验,部署起来真的很简单。

  • 相关阅读:
    centos下部署启动elasticsearch错误集合与解决方案
    rpm和yum的区别
    centos7 安装Jdk1.8.0
    nvm-windows安装
    linux运行.sh命令
    centos7 安装 nvm
    centos7 安装、使用git
    转载:centos安装redis
    centos7 安装Node.js并配置为全局可用
    前端代码tomcat下简单部署
  • 原文地址:https://www.cnblogs.com/ami/p/455704.html
Copyright © 2011-2022 走看看