下面簡單介紹一下如何在工程中添加Microsoft SQL Server 2000 Desktop Engine (MSDE)的自動安裝合併模塊MSM:
這時,在沒有SQL環境的機器上運行你的安裝包,在程序安裝完後,會自動安裝MSDE的MyServer實例,並在重起機器後,自動啓動Sql Server的實例。
=======================================================================
前一篇中介紹瞭如何連同Sql Server的桌面版本一同打包到安裝程序的簡單步驟,這裏還想就自己對於:發佈程序到已經有SQL環境的計算機時,自動使用SQL的Osql來恢復指定的數據庫到你的SQL Server的Date中。
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
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
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
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