** MSDE ** ** 自动安装使用方法 ** ** **
** 一、 ** ** 制作自动安装的 ** ** SQL **
已制作完成,程序放在:
\\ 工程项目 \ 安装盘制作 \MSDE
说明:自动安装目的是在 MSDE 安装程序执行时不出现画面,并且自动按配置好的步骤安装;
自动配置文件 UNATTEND.ISS 的制作方法:
用 SQL SERVER 安装程序开始安装,选择“高级选项”,再选择“无人值守”,接下来为安装所做的选择和配置均被存入 c:\windows\SETUP.ISS 文件中,该文件就是上面提到的 UNATTEND.ISS 。
制作为无人值守文件后,执行其中的 SETUP.bat 文件就能自动安装 SQL 。只要能在我们应用程序的安装盘中有办法自动执行该文件中的内容即可自动安装 SQL 。
** 二、 ** ** 修改 ** ** SETUP1.exe **
为了 VB 工程打包后,安装程序除了正常执行应用程序的安装功能外,另外再自动执行我们制作的无人值守 SQL 安装程序,须修改 VB 的打包工具。修改方法如下:
A、 打开 c:\program files\Microsoft visual studio\vb98\wizards\pdwizard\setup1 目录下的 setup1 工程
B、 在 basesetup1 模块中的 exitsetup 过程找到以下语句:
Case intExitCod
………
Case Else
C、 在 Case Else 前增加调动 SQL 自动安装的语句
D、 编译成 EXE 文件
E、 将编译好的 EXE 文件复制到上级目录:
c:\program files\Microsoft visual studio\vb98\wizards\pdwizard
** 目前已编译好的程序放在 ** ** **
** \\CHANCE-SERVER\ ** ** 工程项目 ** ** \ ** ** 安装盘制作 ** ** \SETUP1 **
** 三、 ** ** 制作数据库文件 ** ** **
因本 MSDE 是基本 SQL SEREVER7 的,故须有 SQL SERVER7 下将应用程序所用的数据库备份成一个文件名(如: DBBACK )。
** 四、 ** ** 打包 ** ** **
A 、工程打印包时,须将 SQL 的自动安装程序( msde86.exe 、 unattend.iss )打到包内,打包时指定该 2 程序的解压路径为:
$(WinSysPath)
B 、将制作的数据库备份文件( DBBACK )也打到包内,打包时指定该文件的解压路径为:
$(AppPath)
C 、将应用程序的配置文件、使用说明书等同时打到包内,打包时指定该文件的解压路径为:
$(AppPath)
** 五、 ** ** 安装 ** ** **
应用程序安装时,执行完标准的安装步骤后,会提问:
是否安装数据库?
若选择“是”则自动安装 SQL (对已有 SQL SERVER 的机器千万不要安装)。
说明:有时制作的安装程序在 Windows2000 下安装时,复制完 8 个初始化程序后,提示“程序过时”要求重新启动再安装。但重新启动后还是同样的问题,无法安装。此时修改安装包中的 SETUP.lst 文件,在:
[email protected],$(WinSysPath),,$(Shared),10/2/00
前增加 REM ,这样重新安装时,只复制前 2 个文件,安装程序能顺利执行。
** 六、 ** ** 运行程序 ** ** **
程序安装后,应用程序所须的数据库并未被装入 SQL SERVER 。应在我们编写的 VB 的应用程序中增加自动向 SQL SERVER 添加数据库的功能。
实现方法:每次启动应用程序时,判断 SQL SERVER 数据库中是否存在我们要的数据库,若无则执行下以操作:
1、 将备份文件复制到 MASTER 数据库对应的目录下;
2、 使用数据恢复命令将 MASTER 目录下的备份文件恢复到指定的数据库名中。
程序清单见下页:
** =============== ** ** 本函数须在连接数据库前使用 ** ** ================ **
** =============== ** ** 须在工程中应用 ** ** SQLDMO================ **
Public Function sCopyMDF(sSvrName As String, sDBName As String, sUID As String, sPWD As String, sMDFName As String) As String
参数说明: sSvrName :服务器名
sDBName :数据库名
sUID :用户名
sPWD :密码 ,
sMDFName :数据库备份文件名
Dim Fso As Scripting.FileSystemObject
Dim strMessage As String
Dim db As Variant
Dim fDataBaseFlag As Boolean
Dim X, Osvr
On Error Resume Next
sCopyMDF = ""
fDataBaseFlag = False
Set Fso = CreateObject("Scripting.FileSystemObject")
Set Osvr = CreateObject("SQLDMO.SQLServer")
Osvr.Connect sSvrName, sUID, sPWD
Osvr.Start True, sSvrName, sUID, sPWD
X = Osvr.Databases.Count ' 如果失败, DMO 需要进行初始化
' 通过在本地 MSDE 服务器上循环检查所有数据库名称,
' 检查 DemoDatabase 是否存在于该服务器。
For Each db In Osvr.Databases
If db.Name = sDBName Then ' 该数据库存在
fDataBaseFlag = True
Exit For ' 退出循环
End If
Next
If Not fDataBaseFlag Then ' 不存在名为 DemoDatabase 的数据库
Dim oRestore As New SQLDMO.Restore
oRestore.Action = SQLDMORestore_Database
oRestore.Database = sDBName
Fso.CopyFile App.Path & "" & sMDFName, _
Osvr.Databases("master").PrimaryFilePath & sMDFName, True
oRestore.Files = Osvr.Databases("master").PrimaryFilePath & sMDFName
oRestore.ReplaceDatabase = True
‘ 判断有否 ”C:\mssql7\Data\” 目录 , 没有则要先建此目录
oRestore.SQLRestore Osvr
Else
sCopyMDF = sMDFName & " 退出 MSDE 服务器 "
End If
ExitCopyMDF:
Osvr.Disconnect
Set Osvr = Nothing
Exit Function
sCopyMDFTrap:
If err.Number = -2147216399 Then 'DMO 需进行初始化
Resume Next
Else
sCopyMDF = err.Description
End If
Resume ExitCopyMDF
Exit Function
End Function