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文件,在:
(WinSysPath),,$(Shared),10/2/00]File3=@VB6CHS.DLL,$(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