自動安裝SQL Server資料庫

來源:互聯網
上載者:User

這段時間,手頭的項目接近收尾,以前不太注意的工程打包問題卻慢慢凸現出來,這裡指的不單單是製作一個可以安裝的工程安裝包,還有關於缺少運行環境時的資料庫執行個體的安裝和資料庫資料的安裝恢複。這裡先把關於MSDE打包進安裝程式的心得於大家分享,那麼咱們廢話少說。

當你的項目基本完成測試,準備發布的時候,製作一個使用者使用簡便的自動安裝包就成為編碼完成後的又一個需要解決的問題,工程開發的是否完滿,從安裝中,使用者應該會有個最初的體驗。

下面簡單介紹一下如何在工程中添加Microsoft SQL Server 2000 Desktop Engine (MSDE)的自動安裝合併模組MSM:

 

 

1. 首先你需要下載MSDE2000的sp3安裝包。可以從下面的連結去下載,URL: http://www.microsoft.com/sql/downloads/2000/sp3.asp

 

 

 

2. 下載完成,你可以安裝或者用ZIP解壓到本地硬碟,將可以看到:Msi、MSM、Setup這3個目錄和setup等檔案,其中的MSM檔案夾中的東東就是本文要介紹的MSDE2000合併模組。

 

 

 

3. 在你的工程中添加一個安裝工程(假設為MySetup1,路徑為c:/MySetup1),按照正常的步驟添加工程輸出(Project Output),選擇輸出檔案(primary output)和內容檔案(content files)兩項。

 

 

 

4. 添加合併模組(Merge Moudle),選擇瀏覽,指定到你的MSDE的MSM檔案夾,選則MSM和msm/1033下的所有的檔案(REPL.MSM、REPL_RES.MSM、 DMO_RES.MSM和DMO.MSM可以不選),開啟。

 

 

 

5. 設定安裝工程的屬性(Properties)中的SearchPath,指定為你的MSM所在路徑(這時需要添加兩個:path/MSM和path/MSM/1033)。

 

 

 

6. 設定關於安裝程式的其他屬性咱們暫且不提,這是可以對你的安裝工程進行編譯了,當編譯通過後,你可以在c:/MySetup1/Debug/看到你的打包工程MySetup.msi。

 

 

 

7. 這是工程打包告一段落,下面我們需要修改打好的安裝包,使它可以在安裝完程式後自動安裝MSDE的一個執行個體(假設執行個體名為:MyServer)。現在我們需要用到MS的一個工具ORCA,:http://support.microsoft.com/default.aspx?scid=kb;EN-US;255905安裝了orca後就可以利用這個工具對我們的MySetup1.msi進行修改了。

 

 

 

8. 用ORCA開啟安裝包檔案MySetup.msi,找到Property這個table,ADD Row 在Propetry中填入SqlInstanceName,value中填入執行個體名MyServer。其他的參數請參見:http://support.microsoft.com/?id=810826和http://support.microsoft.com/default.aspx?scid=kb;en-us;281983

 

 

 

9. 所有的參數中有關密碼的屬性,我沒有成功,就是SqlSaPwd,這個參數是和SqlSecurityMode一起使用的,但是我一直沒有設定成功,密碼總是為空白的,不知何故!

 

 

 

10. 選擇InstallExecuteSequence這個table,找到SetPropSQLMSDEInstalled這個Action,修改206為102;找到RemoveExistingProducts,修改1525為6601。儲存,退出!

 

 

 

 

這時,在沒有SQL環境的機器上運行你的安裝包,在程式安裝完後,會自動安裝MSDE的MyServer執行個體,並在重起機器後,自動啟動Sql Server的執行個體。

=======================================================================

前一篇中介紹了如何連同Sql Server的案頭版本一同打包到安裝程式的簡單步驟,這裡還想就自己對於:發布程式到已經有SQL環境的電腦時,自動使用SQL的Osql來恢複指定的資料庫到你的SQL Server的Date中。

 

 

 

首先,在c:/建立一個臨時目錄,例如c:/TempBD ,拷貝Osql.exe到目錄下,拷貝你的Database Backup(TruckDB)到目錄下;在目錄下分別建立Restore.bat和Restore.txt檔案,內容如下:

 

1. Restore.bat檔案內容:

osql -E -S -i C:/TempDB/Restore.txt

 

 

2. Restore.txt檔案內容:

use master

if exists (select * from sysdevices where name=´TruckDB´)

EXEC sp_dropdevice ´TruckDB´

Else

EXEC sp_addumpdevice ´disk´,´TruckDB´, ´C:/Program Files/Microsoft SQL Server/MSSQL/Data/TruckDB.mdf´

 

 

 

restore database TruckDB

from disk=´c:/TempDB/TruckDB´

with replace

 

 

 

 

 

 

 

其次,在你的工程中添加一個Installer Class:選中Project主工程,添加Installer Class,名稱假定為installer1。選擇instller1的字碼頁,添加下面的代碼:

 

 

 

Public Overrides Sub Install(ByVal stateSaver As System.Collections.IDictionary)

 

 

´重寫install方法

 

 

 

Dim file As System.IO.File

 

 

If file.Exists("C:/Program Files/Microsoft SQL Server/MSSQL/Data/TruckDB_data.mdf") = True Then Exit Sub

 

 

MyBase.Install(stateSaver)

 

 

 

 

 

Dim CheckedDir As System.IO.Directory

 

 

 

 

 

If CheckedDir.Exists("C:/Program Files/Microsoft SQL Server/MSSQL/Data") = False Then

 

 

CheckedDir.CreateDirectory("C:/Program Files/Microsoft SQL Server/MSSQL/Data")

 

 

End If

 

 

 

 

 

Dim FullPath As String

 

 

Dim Asm As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()

 

 

Dim strConfigLoc As String

 

 

strConfigLoc = Asm.Location

 

 

 

 

 

 

Dim strTemp As String

 

 

strTemp = strConfigLoc

 

 

´提取安裝路徑

 

 

strTemp = strTemp.Remove(strTemp.LastIndexOf("/"), Len(strTemp) - strTemp.LastIndexOf("/"))

 

 

 

 

 

´Copy DateBase to computer.

 

 

If CreatDIR(strTemp) = False Then

 

 

´失敗,反安裝

 

 

Me.Uninstall(stateSaver)

 

 

Exit Sub

 

 

Else

 

 

 

 

 

End If

 

 

 

 

 

 

 

 

 

 

 

If InstallDB(strTemp) = False Then

 

 

‘失敗,反安裝

 

 

Me.Uninstall(stateSaver)

 

 

Exit Sub

 

 

Else

 

 

 

 

 

End If

 

 

‘刪除資料庫臨時檔案

 

 

DeleteDIR(“c:/TempDB”)

 

 

DeleteDIR(strTemp “/TempDB”)

 

 

 

 

 

 

 

 

End Sub

 

 

 

 

 

Public Overrides Sub Uninstall(ByVal stateSaver As System.Collections.Idictionary)

 

 

‘執行反安裝

 

 

‘利用反射提取安裝路徑

 

 

MyBase.Uninstall(stateSaver)

 

 

Dim Asm As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()

 

 

Dim strConfigLoc As String

 

 

strConfigLoc = Asm.Location

 

 

 

 

 

Dim strTemp As String

 

 

strTemp = strConfigLoc

 

 

strTemp = strTemp.Remove(strTemp.LastIndexOf(“/”), Len(strTemp) – strTemp.LastIndexOf(“/”))

 

 

‘刪除資料庫檔案和臨時檔案

 

 

DeleteDIR(strTemp “/TempDB”)

 

 

DeleteDIR(“c:/TempDB”)

 

 

End Sub

 

 

 

 

 

Private Function DeleteDIR(ByVal path As String) As Boolean

 

 

‘刪除指定的檔案夾

 

 

Dim dir As System.IO.Directory

 

 

If dir.Exists(path) = True Then dir.Delete(path, True)

 

 

End Function

 

 

 

 

 

Private Function CreatDIR(ByVal path As String) As Boolean

 

 

‘建立指定的檔案夾

 

 

Dim Files As System.IO.File

 

 

Dim Dirs As System.IO.Directory

 

 

Try

 

 

If Dirs.Exists(“c:/TempDB”) = False Then Dirs.CreateDirectory(“c:/TempDB”)

 

 

‘copy Creat DB files

 

 

CopyFile(path “/TempDB”, “C:/TempDB”)

 

 

 

 

 

Return True

 

 

Catch

 

 

Return False

 

 

End Try

 

 

 

 

 

End Function

 

 

 

 

 

Private Sub CopyFile(ByVal SourceDirName As String, ByVal DestDirName As String)

 

 

‘copy指定的檔案夾的所有檔案到目標檔案夾(單層)。

 

 

Dim dir As System.IO.Directory

 

 

Dim File As System.IO.File

 

 

Dim sPath, oPath As String

 

 

Dim I As Integer

 

 

For I = 0 To dir.GetFiles(SourceDirName).Length – 1

 

 

sPath = dir.GetFiles(SourceDirName).GetValue(i).ToString

 

 

oPath = Microsoft.VisualBasic.Right(sPath, Len(sPath) – Len(SourceDirName))

 

 

File.Copy(sPath, DestDirName oPath, True)

 

 

Next

 

 

End Sub

 

 

 

 

 

Private Function InstallDB(ByVal path As String) As Boolean

 

 

‘安裝資料庫,調用自動批處理。

 

 

´Dim CheckedDir As System.IO.Directory

 

 

´If CheckedDir.Exists(“C:/Program Files/Microsoft SQL Server/MSSQL/Data”) = False Then

 

 

´CheckedDir.CreateDirectory(“C:/Program Files/Microsoft SQL Server/MSSQL/Data”)

 

 

´End If

 

 

Try

 

 

Shell(“c:/TempDB/Restore.bat”, AppWinStyle.Hide, True)

 

 

Catch

 

 

End Try

 

 

 

 

 

End Function

 

 

 

 

 

 

然後,在你的工程中添加一個安裝工程,取名為MySetup1,按照正常的步驟添加工程輸出(Project Output),選擇輸出檔案(primary output)和內容檔案(content files)兩項,再添加檔案夾到application Folder,檔案夾的Name為TempDB,再給檔案夾TempDB添加檔案:osql.exe,Restore.bat,Restore.txt,TruckDB(資料庫檔案)。設定你的檔案夾的properties的AlwaysCreate為True。對你的Setup工程進行編譯。

 

 

 

這時,產生的安裝包,將會在安裝完程式後,自動調用Installer類的方法,恢複你的TruckDB資料庫。

 

 

 

注意,TruckDB在產生的時候,應該備份儲存到“C:/Program Files/Microsoft SQL Server/MSSQL/Data/”下,便於恢複。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.