程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 實現自動安裝SQLServer數據庫

實現自動安裝SQLServer數據庫

編輯:關於SqlServer
下面簡單介紹一下如何在工程中添加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和msm1033下的所有的文件(REPL.MSM、REPL_RES.MSM、 DMO_RES.MSM和DMO.MSM可以不選),打開。
  
  5. 設置安裝工程的屬性(PropertIEs)中的SearchPath,指定為你的MSM所在路徑(這時需要添加兩個:pathMSM和pathMSM1033)。
  
  6. 設置關於安裝程序的其他屬性咱們暫且不提,這是可以對你的安裝工程進行編譯了,當編譯通過後,你可以在c:MySetup1Debug看到你的打包工程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到目錄下,拷貝你的數據庫備份(TruckDB)到目錄下;在目錄下分別創建Restore.bat和Restore.txt文件,內容如下:
  
  1. Restore.bat文件內容:
  
  osql -E -S -i C:TempDBRestore.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 FilesMicrosoft SQL ServerMSSQLDataTruckDB.mdf'
  
  restore database TruckDB
  
  from disk='c:TempD

BTruckDB'
  
  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 FilesMicrosoft SQL ServerMSSQLDataTruckDB_data.mdf") = True Then Exit Sub
  
  MyBase.Install(stateSaver)
  
  Dim CheckedDir As System.IO.Directory
  
  If CheckedDir.Exists("C:Program FilesMicrosoft SQL ServerMSSQLData") = False Then
  
  CheckedDir.CreateDirectory("C:Program FilesMicrosoft SQL ServerMSSQLData")
  
  End If
  
  Dim FullPath As String
  
  Dim Asm As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()
  
  Dim strConfigLoc As String
  
  strConfigLoc = Asm.Location
  
  Dim file As System.IO.File
  
  If file.Exists("C:Program FilesMicrosoft SQL ServerMSSQLDataTruckDB_data.mdf") = True Then Exit Sub
  
  MyBase.Install(stateSaver)
  
  Dim CheckedDir As System.IO.Directory
  
  If CheckedDir.Exists("C:Program FilesMicrosoft SQL ServerMSSQLData") = False Then
  
  CheckedDir.CreateDirectory("C:Program FilesMicrosoft SQL ServerMSSQLData")
  
  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

您正在看的SQLserver教程是:實現自動安裝SQLServer數據庫。>  
  '提取安裝路徑
  
  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.Director

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved