分享
 
 
 

安装和部署,同时支持多个数据库安装.

王朝other·作者佚名  2006-01-10
窄屏简体版  字體: |||超大  

/* 说明:本安装方法,是以实际工作为例,测试通过!

*/

一).创建部署项目

1. 在“文件”菜单上指向“添加项目”,然后选择“新建项目”。

2. 在“添加新项目”对话框中,选择“项目类型”窗格中的“安装和部署项目”,然后选择“模板”窗格中的“安装项目”。在“名称”框中键入 ZehuaSoftSetUp。

3. 单击“确定”关闭对话框。

4. 项目被添加到解决方案资源管理器中,并且文件系统编辑器打开。

5. 在“属性”窗口中,选择 ProductName 属性,并键入 水质信息管理及分析评价系统 。

在“属性”窗口中,其它属性,可以自己适当添加

二).将 主程序 项目的输出添加到部署项目中

1. 在“ZehuaSoftSetUp”中,指向“添加”,然后选择“项目输出”。

2. 在“添加项目输出组”对话框中,选择“项目”下拉列表中的“你的程序”。

3. 从列表中选择“主输出”和“内容文件”组,然后单击“确定”。

三).创建安装程序类

1. 在“文件”菜单上指向“新建”,然后选择“项目”。

2. 在“新建项目”对话框中,选择“项目类型”窗格中的“Visual Basic 项目”,然后选择“模板”窗格中的“类库”。在“名称”框中键入 ZehuaSetUpClass。

3. 单击“打开”关闭对话框。

4. 从“项目”菜单中选择“添加新项”。

5. 在“添加新项”对话框中选择“安装程序类”。在“名称”框中键入 SetupClass。

6. 单击“确定”关闭对话框。

7.为了使用多线程,添加OSQL.exe文件,在SQL_Server 中可以找到该文件

8. 详细代码附后。

四).创建自定义安装对话框

1. 在解决方案资源管理器中选择“ZehuaSoftSetUp”项目。在“视图”菜单上指向“编辑器”,然后选择“用户界面”。

2. 在用户界面编辑器中,选择“安装”下的“启动”节点。在“操作”菜单上,选择“添加对话框”。

3. 在“添加对话框”对话框中,选择“许可协议”对话框,然后单击“确定”关闭对话框。

在“许可协议”属性中,添加LicenseFile

4. 在“添加对话框”对话框中,选择“文本框 (A)”对话框,然后单击“确定”关闭对话框。

5. 在“操作”菜单上,选择“上移”。重复此步骤,直到“文本框 (A)”对话框位于“安装文件夹”节点之上(最上面)。

6. 在“属性”窗口中,选择 BannerText 属性并键入:安装数据库.

7. 选择 BodyText 属性并键入:安装程序将在目标机器上安装数据库

8. 选择 Edit1Label 属性并键入:数据库名称:

9. 选择 Edit1Property 属性并键入 DATABASENAME

10. 选择 Edit1Value 属性并键入:water,waterSJSGNQ

11. 选择 Edit2Label 属性并键入:服务器名:

12. 选择 Edit2Property 属性并键入 SERVERNAME

13. 选择 Edit2Value 属性并键入:(local)

14. 选择 Edit3Label 属性并键入:用户名:

15. 选择 Edit3Property 属性并键入 USERNAME

16. 选择 Edit3Value 属性并键入:sa

17. 选择 Edit4Label 属性并键入:密码:

18. 选择 Edit4Property 属性并键入 PASSWORD

19. 选择 Edit3Value 属性并键入

20. 选择 Edit2Visible、Edit3Visible 和 Edit4Visible 属性,并将它们设置为 true

五).创建自定义操作

1. 在解决方案资源管理器中选择“ZehuaSoftSetUp”项目。指向“添加”,然后选择“项目输出”。

2. 在“添加项目输出组”对话框中,选择“项目”下拉列表中的“ZehuaSetUpClass”。

3. 从列表中选择“主输出”和“内容文件”组,然后单击“确定”。

4. 在解决方案资源管理器中选择“ZehuaSoftSetUp”项目。在“视图”菜单上指向“编辑器”,然后选择“自定义操作”。

2. 在自定义操作编辑器中选择“安装”节点。在“操作”菜单上,选择“添加自定义操作”。

3. 在“选择项目中的项”对话框中,双击“应用程序文件夹”。

4. 选择“主输出来自 ZehuaSetUpClass(活动)”项,然后单击“确定”关闭对话框。

5. 在“属性”窗口中,选择 CustomActionData 属性并键入“/dbname=[DATABASENAME] /server=[SERVERNAME] /user=[USERNAME] /pwd=[PASSWORD] /targetdir="[TARGETDIR]\"”。

附:/targetdir="[TARGETDIR]\"是安装后的目标路径,为了在installDB类中获得安装后的路径,我们设置此参数。

六)所有的操作向导都可以添加背景图片

添加方式:在"用户界面"->启动->属性->BannerBitMap中添加

七).系统判断客户机器环境方式

最简单方式,用微软PluginInstaller.msi插件,安装后,按照上述部署方式,安装包能就可以智能判断客户机器是否有.net Framwork1.1,MDC 2.0版本,如果系统不具备安装环境,系统会自动提示客户机器安装

八).其它

1.默认安装虚拟目录名称更改方式:

ZehuaSoftSetUp->web应用程序文件夹->属性->VirtuarDirectory-更改你要安装的名称(HwShuiZhi)

2.由于数据库备份文件比较大,建议直接添加把water,waterSJSGNQ添加到ZehuaSoftSetUp 项目中去!

3.三个项目同时编译,如果项目编译通过

编译ZehuaSoftSetUp,生成安装包!

--安装文件类,代码:

' 类说明:该类实现通用的安装

' 作 者:zlp@zehua.com.cn

' 新建时间:2005-7-6

' 最后修改:2005-7-6

' 版权所有:北京泽华信息技术有限公司

'/

Imports System.ComponentModel

Imports System.Configuration.Install

Imports System.IO

Imports System.Reflection

<RunInstaller(True)> Public Class SetupClass

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()

components = New System.ComponentModel.Container()

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

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"))

'判断如果目标计算机中有数据库,则删除原来数据库,重新最新数据库

'(1):支持同时安装多个数据库。

'(2):支持历史数据装载

'(3):为支持以后扩充,要写WebConfig时候,WebConfig中必须预留"connString" 字样

'例子:Me.Context.Parameters.Item("dbname")="water,waterSJSGNQ"

'得到目标计算机的虚拟目录地址

Dim stLocation As String

Dim ASM As [Assembly] = [Assembly].GetExecutingAssembly()

stLocation = ASM.Location

Dim dir As System.IO.Directory

stLocation = dir.GetParent(stLocation).FullName()

Dim DataBaseArray() As String

Dim Loopi As Integer

DataBaseArray = Split(Me.Context.Parameters.Item("dbname"), ",")

For Loopi = 0 To UBound(DataBaseArray)

'建立数据库,未加栽数据

ExecuteSql(connStr, "master", "IF EXISTS (SELECT * FROM MASTER..sysdatabases WHERE NAME=N'" & DataBaseArray(Loopi) & " ') DROP DATABASE " & DataBaseArray(Loopi) & " CREATE DATABASE " & DataBaseArray(Loopi) & " ")

'加载历史数据

CreateDataBase(DataBaseArray(Loopi), stLocation)

'将连接字符串写入Web.config,为将来预留程序接口

'WriteWebConfig(DataBaseArray(Loopi))

Next

'删除目标计算机的OSQL文件

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

If sqlFileInfo.Exists Then

sqlFileInfo.Delete()

End If

Catch ex As Exception

Throw ex

End Try

End Sub

'在数据库实现数据加载

Private Sub CreateDataBase(ByVal DatabaseName As String, ByVal stLocation As String)

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"))

'调用OSQL,实现数据的装载

Dim SQLString As String

SQLString = "use master declare @Data_Path as varchar(100),@Log_Path as varchar(100) "

SQLString = SQLString + " select @Data_Path=ltrim(rtrim(filename)) from " & DatabaseName & "..sysfiles where charindex(''MDF'',filename)>0 "

SQLString = SQLString + " select @Log_Path=ltrim(rtrim(filename)) from " & DatabaseName & "..sysfiles where charindex(''LDF'',filename)>0 "

SQLString = SQLString + " RESTORE DATABASE " & DatabaseName & " FROM DISK = ''" & stLocation & "\" & DatabaseName & ".bak'' with replace, move ''" & DatabaseName & "_Data'' to @Data_Path, move ''" & DatabaseName & "_Log'' to @Log_Path "

SQLString = " exec('master..xp_cmdShell '' osql -U " & Me.Context.Parameters.Item("user") & " -P " & Me.Context.Parameters.Item("pwd") & " -S " & Me.Context.Parameters.Item("targetdir") & " -Q '' " & SQLString & " ') "

Dim sqlProcess As New System.Diagnostics.Process

sqlProcess.StartInfo.FileName = "osql.exe "

sqlProcess.StartInfo.Arguments = SQLString

ExecuteSql(connStr, "master", SQLString)

sqlProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden

sqlProcess.Start()

sqlProcess.WaitForExit() '等待执行

sqlProcess.Close()

'删除目标计算机的数据库备份文件

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

If sqlFileInfo.Exists Then

sqlFileInfo.Delete()

End If

End Sub

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

Private Sub WriteWebConfig(ByVal DatabaseName As String)

Dim di As IO.DirectoryInfo

di = New IO.DirectoryInfo(Me.Context.Parameters.Item("targetdir"))

Dim fi As IO.FileInfo

For Each fi In di.GetFiles("web.config")

ProcessString(fi.FullName, DatabaseName)

Next

End Sub

Public Sub ProcessString(ByVal FileName As String, ByVal DatabaseName As String)

Try

Dim FileInfo As System.IO.FileInfo = New System.IO.FileInfo(FileName)

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"), DatabaseName, 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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有