MSDE自動安裝使用方法
2024-07-21 02:23:29
供稿:網友
一、 制作自動安裝的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
本文來源于網頁設計愛好者web開發社區http://www.html.org.cn收集整理,歡迎訪問。