博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用VS2005制造WEB安装程序
阅读量:6814 次
发布时间:2019-06-26

本文共 5726 字,大约阅读时间需要 19 分钟。

环境:
windows2003 + vs2005+sqlserver2000
  1、
打开 VS2005
,打开工程或网站(这里的示例是一个已发布的网站系统).   
2、
从“解决方案资源管理器中”右键点击解决方案名称,选择“添加”――“新建项目”,从打开的“添加新项目”窗口,在“项目类型”栏选择“其他项目类型”――“安装部署”,在模板栏,选“ web
项目”,在下面的名称和地址栏输入名称和地址。
3
、生成 sql
文件(只生成创建数据表的 SQL
语句)
打开 SQLSER
企业管理器,登录,选择数据库――选择要生成 SQL
语句的表,右键――所有任务――生成 SQL
脚本。在打开的窗口中点击“确定”,保存 SQL
脚本(注意: sql
文件一定要用小写的英文名称命名,保存完成后把 SQL
文件另存为 TXT
文件,并把里面的所有的“ GO
”去掉。)
4
、创建安装程序类库和安装程序类
从“解决方案资源管理器中”右键点击解决方案名称,选择“添加”――“新建项目”,从打开的“添加新项目”窗口,在“项目类型”栏选择“ VISAL BASIC
”,在模板栏,选“类库”,在下面的名称和地址栏输入名称和地址。点击“确定”。
 
5
、从“解决方案资源管理器中”点击刚生成的类库,删除自动生成的 class1.vb
类,右键点击类库名称――添加――新建项,选择“安装程序类”,输入名称,点击“添加”按钮。
 
6
、打开刚生成的安装程序类,在 dbtest.vb
中,添加如下代码
Imports
 System.ComponentModel
Imports
 System.Configuration.Install
Imports
 System.IO
Imports
 System.Reflection
 
 
Public
 Class dbtest
 
    '
声明私有变量
    Private sqlConnection1 As SqlClient.SqlConnection
    Private ServerName As String
    Private AdminName As String
    Private AdminPwd As String
 
    Public Sub New()
        MyBase.New()
 
        '
组件设计器需要此调用。
        InitializeComponent()
 
        '
调用 InitializeComponent 后添加初始化代码
 
    End Sub
 
    Private Function GetSql(ByVal Name As StringAs 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("
读取SQL文件出错: "
 & 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, sqlConnection1)
 
        Command.Connection.Open()
        Command.Connection.ChangeDatabase(DatabaseName)
        Try
            Command.ExecuteNonQuery()
        Finally
            ' Finally, blocks are a great way to ensure that the connection
            ' is always closed.
            Command.Connection.Close()
        End Try
    End Sub
 
    Protected Sub AddDBTable()
        Try
            
生成数据库
            ExecuteSql("master""CREATE DATABASE water")
 
            
根据SQL语句生成表
            ExecuteSql("water", GetSql("watertable.txt"))
 
        Catch ex As Exception
            ' Reports any errors and abort.
            MsgBox("
生成数据库错误: "
 & ex.Message)
            Throw ex
        End Try
    End Sub
    Private Sub WriteWebConfig()
        '
修改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 = "AdoConnBySql" Then
                        '
写入连接字符串
                        Node.Attributes.GetNamedItem("value").Value = String.Format("Provider=SQLOLEDB;Data Source={0};Password={2};User ID={1};Initial Catalog=water"Me.Context.Parameters.Item("server"), 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
    ''' <summary>
    ''' 
安装程序入口
    ''' </summary>
    ''' <param name="stateSaver"></param>
    ''' <remarks></remarks>
    Public Overrides Sub Install(ByVal stateSaver As _
        System.Collections.IDictionary)
 
        MyBase.Install(stateSaver)
 
        '
读取用户连接数据库信息
        ServerName = Trim(Me.Context.Parameters.Item("server"))
        AdminName = Trim(Me.Context.Parameters.Item("user"))
        AdminPwd = Trim(Me.Context.Parameters.Item("pwd"))
        '
根据用户界面输入的信息建立数据库联接
        sqlConnection1 = New SqlClient.SqlConnection
        sqlConnection1.ConnectionString = "User ID=" + AdminName + ";Data Source = " + ServerName + ";Password=" + AdminPwd + ";Initial Catalog=master"
        'sqlConnection1.Open()
 
 
        '
添加数据库中的表
        AddDBTable()
 
        '
修改web.config文件中的数据库连接串
        WriteWebConfig()
 
    End Sub
End
 Class
6
、添加 SQL
脚本文件到类库中。
   
右键点击类库名称――添加――现有项,选择 watertable.txt
文件。点击“确定”。
   
右键选择刚刚添加的 watertable.txt
文件,选“属性”,把“生成操作”项内容修改为“嵌入的资源”。
 
7
、生成类库的 DLL
文件。
 
8
、右键安装项目名称――“视图”――“文件系统”,在打开的“文件系统窗口”,右键“ WEB
应用程序文件夹”――“添加”――项目输出,
 
从“项目”下拉列表框中,选择类库为“主输出”,
 
重复上步操作,选择网站为“内容文件”
 
 
9
、添加安装时用户要输入的数据库服务器名称、用户名、密码的用户界面。
   
右键安装项目名称――视图――用户界面,在打开的安装界面中,右键“启动”,选择“添加对话框”,在弹出的窗口中,选择“文本框 A
”。
右键文本框 A
,选择“上移”,重复执行,直到在“安装地址”上。
 
 
右键“文本框 A
”――属性,进行如下修改。
Edit1lable1       
数据库服务器 :
Edit1property     DBSERVERNAME
Edit1visible       true
 
Edit2lable1       
用户名 :
Edit2property     USERNAME
Edit2visible       true
 
Edit3lable1       
用户名 :
Edit3property     PASSWORD
Edit3visible       true
 
Edit4visible       false
 
 
10
、添加自定义操作
 
在“解决方案资源管理器中”,右键安装项目名称――“视图”――“自定义操作”,在打开的自定义操作窗口,右键“安装”――“添加自定义操作”,在打开的“选择项目的项”,双击“ WEB
应用程序文件夹”――主输出来自 clslib(
活动 )
 
右键“主输出来自 clslib(
活动 )
”――“属性窗口”,修改属性
Customactiondata 
 /server=[DBSERVERNAME] /user=[USERNAME] /pwd=[PASSWORD]  /targetdir="[TARGETDIR]\"
注意:每个变量之间一定要有一个空格做间隔,如果想得到安装文件在安装机器中的路径,一定要添加   targetdir 
变量。
 
11
、添加系统必备
右键安装项目名称――属性――选择系统必备
在打开的系统必备窗口,选择 
.net framework 2.0
――选择“从与我的应用程序相同路径下载系统必备”,点击“确定”
 
12
、生成安装项目。
从菜单“生成”――“生成 websetup
,
生成安装项目。
 
13
、安装项目界面
从“解决方案资源管理器”――安装项目,右键安装项目名称――安装。
 
生成的数据库
 
生成的网站
 
修改后的 web.config
写在后面的话:
做完程序后,发现用 SQLSER
的恢复数据库方法比用 SQL
文件要好的多,也方便的多,就做了一个过程,代码如下:
 
Private sub RestoreDB()
Dim strdir as string
Dim strSql as string
 
得到安装程序路径
Strdir=me.context.parameters.item(“targetdir”)
Strsql="RESTORE DATABASE water FROM DISK = '" + strdir + "data.bak' " +
                " WITH MOVE 'water_data' TO '" + "c:\water.mdf', " +
                " MOVE 'water_log' TO '" + "c:\water_log.ldf' "
 
Executesql(“master”,strsql)
 
End sub
       
 
注意: data.bak
sqlserver
备份数据库名,也可以没有后缀,如果没有后缀,在程序中也不要有,还有备份文件要和发布的网站文件放在一起, water_data
water_log
是逻辑数据名,在 sqlserver
数据库中的备份恢复中都能查看到的, TO 
后面是把 *.mdf
*.ldf
文件复制到一个路径下,直接写死就可以了。
本文转自 牛海彬 51CTO博客,原文链接:http://blog.51cto.com/newhappy/135713,如需转载请自行联系原作者
你可能感兴趣的文章
MySQL - 解决root用户下仍然出现权限问题-无法建库
查看>>
BCH开发团队BU为什么选择让矿工投票?
查看>>
GC机制
查看>>
【排序】冒泡排序 Swift版本
查看>>
【c】斐波那契数
查看>>
php 生成唯一值
查看>>
Redis数据结构及对象(上)
查看>>
受限玻尔兹曼机的实现及其在推荐系统中的应用
查看>>
2018电影票房分析-谁才是票房之王
查看>>
程序员可以干到多少岁?
查看>>
Storm系列(六)storm和kafka集成
查看>>
东南亚的招聘骗局,程序员请注意!
查看>>
Android 获得View宽高的几种方式
查看>>
iOS正则表达式
查看>>
关于javascript的this指向问题
查看>>
Java程序员必须掌握的spring boot
查看>>
关于移动端适配,你必须要知道的
查看>>
Promise的理解和用法
查看>>
java B2B2C Springboot电子商城系统-高可用的服务注册中心
查看>>
Dubbo的总体架构
查看>>