C#项目打包,并自动安装SQL数据库(转)
生活随笔
收集整理的這篇文章主要介紹了
C#项目打包,并自动安装SQL数据库(转)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一).創(chuàng)建部署項(xiàng)目?
1.?在“文件”菜單上指向“添加項(xiàng)目”,然后選擇“新建項(xiàng)目”。?
2.?在“添加新項(xiàng)目”對(duì)話框中,選擇“項(xiàng)目類型”窗格中的“安裝和部署項(xiàng)目”,然后選擇“模板”窗格中的“安裝項(xiàng)目”。在“名稱”框中鍵入?setup1。?
3.?單擊“確定”關(guān)閉對(duì)話框。?
4.?項(xiàng)目被添加到解決方案資源管理器中,并且文件系統(tǒng)編輯器打開。?
5.?在“屬性”窗口中,選擇?ProductName?屬性,并鍵入?信息管理系統(tǒng)?。?
二).將?主程序?項(xiàng)目的輸出添加到部署項(xiàng)目中?
1.?在“文件系統(tǒng)編輯器”中,選擇“應(yīng)用程序文件夾”。在“操作”菜單上,指向“添加”,然后選擇“項(xiàng)目輸出”。?
2.?在“添加項(xiàng)目輸出組”對(duì)話框中,選擇“項(xiàng)目”下拉列表中的“你的程序”。?
3.?單擊“確定”關(guān)閉對(duì)話框。?
4.?從列表中選擇“主輸出”和“內(nèi)容文件”組,然后單擊“確定”。?
三).創(chuàng)建安裝程序類?
1.?在“文件”菜單上指向“新建”,然后選擇“項(xiàng)目”。?
2.?在“新建項(xiàng)目”對(duì)話框中,選擇“項(xiàng)目類型”窗格中的“Visual?Basic?項(xiàng)目”,然后選擇“模板”窗格中的“類庫(kù)”。在“名稱”框中鍵入?installDB。?
3.?單擊“打開”關(guān)閉對(duì)話框。?
4.?從“項(xiàng)目”菜單中選擇“添加新項(xiàng)”。?
5.?在“添加新項(xiàng)”對(duì)話框中選擇“安裝程序類”。在“名稱”框中鍵入?installDB。?
6.?單擊“確定”關(guān)閉對(duì)話框。?
7.?詳細(xì)代碼附后。?
四).創(chuàng)建自定義安裝對(duì)話框?
1.?在解決方案資源管理器中選擇“setup1”項(xiàng)目。在“視圖”菜單上指向“編輯器”,然后選擇“用戶界面”。?
2.?在用戶界面編輯器中,選擇“安裝”下的“啟動(dòng)”節(jié)點(diǎn)。在“操作”菜單上,選擇“添加對(duì)話框”。?
3.?在“添加對(duì)話框”對(duì)話框中,選擇“許可協(xié)議”對(duì)話框,然后單擊“確定”關(guān)閉對(duì)話框。?
4.?在“添加對(duì)話框”對(duì)話框中,選擇“文本框?(A)”對(duì)話框,然后單擊“確定”關(guān)閉對(duì)話框。?
5.?在“操作”菜單上,選擇“上移”。重復(fù)此步驟,直到“文本框?(A)”對(duì)話框位于“安裝文件夾”節(jié)點(diǎn)之上。?
6.?在“屬性”窗口中,選擇?BannerText?屬性并鍵入:安裝數(shù)據(jù)庫(kù).?
7.?選擇?BodyText?屬性并鍵入:安裝程序?qū)⒃谀繕?biāo)機(jī)器上安裝數(shù)據(jù)庫(kù)?
8.?選擇?Edit1Label?屬性并鍵入:數(shù)據(jù)庫(kù)名稱:?
9.?選擇?Edit1Property?屬性并鍵入?CUSTOMTEXTA1?
10.?選擇?Edit1Value?屬性并鍵入:dbservers?
11.?選擇?Edit2Label?屬性并鍵入:服務(wù)器名:?
12.?選擇?Edit2Property?屬性并鍵入?CUSTOMTEXTA2?
13.?選擇?Edit2Value?屬性并鍵入:(local)?
14.?選擇?Edit3Label?屬性并鍵入:用戶名:?
15.?選擇?Edit3Value?屬性并鍵入:sa?
16.?選擇?Edit3Property?屬性并鍵入?CUSTOMTEXTA3?
17.?選擇?Edit4Label?屬性并鍵入:密碼:?
18.?選擇?Edit4Property?屬性并鍵入?CUSTOMTEXTA4?
19.?選擇?Edit2Visible、Edit3Visible?和?Edit4Visible?屬性,并將它們?cè)O(shè)置為?true?
五).創(chuàng)建自定義操作?
1.?在解決方案資源管理器中選擇“setup1”項(xiàng)目。在“視圖”菜單上指向“編輯器”,然后選擇“自定義操作”。?
2.?在自定義操作編輯器中選擇“安裝”節(jié)點(diǎn)。在“操作”菜單上,選擇“添加自定義操作”。?
3.?在“選擇項(xiàng)目中的項(xiàng)”對(duì)話框中,雙擊“應(yīng)用程序文件夾”。?
4.?選擇“主輸出來(lái)自?installDB(活動(dòng))”項(xiàng),然后單擊“確定”關(guān)閉對(duì)話框。?
5.?在“屬性”窗口中,選擇?CustomActionData?屬性并鍵入“/dbname=[CUSTOMTEXTA1]?/server=[CUSTOMTEXTA2]?/user=[CUSTOMTEXTA3]?/pwd=[CUSTOMTEXTA4]?/targetdir="[TARGETDIR]\"”。?
附:/targetdir="[TARGETDIR]\"是安裝后的目標(biāo)路徑,為了在installDB類中獲得安裝后的路徑,我們?cè)O(shè)置此參數(shù)。?
六).添加文件?
1.?將SQL?Server備份成文件DB.dat添加到“setup1”項(xiàng)目(在企業(yè)管理器中右擊數(shù)據(jù)庫(kù)->所有工作->備份數(shù)據(jù)庫(kù),備份成一個(gè)文件,取名為DB.dat)?
2.?將安裝文件LisenceFile.rtf添加到“setup1”項(xiàng)目?
3.?在用戶界面編輯器中,選擇許可協(xié)議,設(shè)置LisenceFile屬性為L(zhǎng)isenceFile.rtf文件?
4.一般會(huì)自動(dòng)將依賴項(xiàng)添加到“檢測(cè)到的依賴項(xiàng)”,如果沒(méi)有,那么我們要手動(dòng)將其加入步驟5)?
Crystal_Managed2003.msm?(如果有水晶報(bào)表)?
dotnetfxredist_x86.msm?(.net一定是必須的)?
?(如果有引用其他的dll)?
5.如果使用了水晶報(bào)表,手動(dòng)加入要包含的文件:項(xiàng)目-->添加-->合并模塊(添加你的程序文件)?(包括dotNetFramework和MDAC27),位于:C:\Program?Files\Common?Files\Merge?Modules\?下,*為必要的?
具體功能如下:?
(托管組件?MSM?處理所有托管組件的分發(fā),其中包括?Windows?窗體查看器、Web?窗體查看器和所有?Crystal?Decisions?命名空間)?
*?Crystal_Managed2003.msm?
Crystal_Managed2003_chs.msm?
(對(duì)于使報(bào)表運(yùn)行所需的所有其他文件,由數(shù)據(jù)庫(kù)訪問(wèn)?MSM?處理其分發(fā)。其中包括數(shù)據(jù)庫(kù)、導(dǎo)出和圖表驅(qū)動(dòng)程序。)?
*?Crystal_Database_access2003.msm?
Crystal_Database_access2003_chs.msm?
(KeyCode?MSM?處理?Crystal?Decisions?密鑰號(hào)碼的安裝,注意是添加合并模塊,否則沒(méi)有“MergeMouduleProperties”屬性)?
*?Crystal_regwiz2003.msm?
(如果報(bào)表文件使用了?ADO.NET?的?dataset?數(shù)據(jù)集對(duì)象,那么?VC_User_CRT71_RTL_X86_---.msm?和?VC_User_STL71_RTL_X86_---.msm?模塊也必須包含在安裝工程中。而且這兩個(gè)模塊的文件安裝屬性的"Module?Retargetable?Folder"項(xiàng)必須修改成為系統(tǒng)目錄)?
VC_User_CRT71_RTL_X86_---.msm?
VC_User_STL71_RTL_X86_---.msm?
(很多人經(jīng)常出現(xiàn)查詢錯(cuò)誤,不妨加上這個(gè))?
5.打開解決方案-->右鍵點(diǎn)擊Crystal_regwiz2003.msm的屬性,在“MergeMouduleProperties”里的“License?Key”填入:AAP5GKS0000GDE100DS(這個(gè)是你生成Crystal?Report是用到的注冊(cè)號(hào)的密碼!)?
七).打包時(shí)加入卸載功能:?
方法一:?
1.在打包項(xiàng)目中添加文件msiexec.exe(一般可在c:\windows\system32\下找到)?
2.在文件系統(tǒng)視圖中選擇應(yīng)用程序文件夾,在msiexec.exe上按右鍵,選擇創(chuàng)建快捷方式,重命名快捷方式為"卸載".?
3.更改此快捷方式的Arguments?為"/x?{產(chǎn)品id}",產(chǎn)品id的值為打包項(xiàng)目的ProductCode屬性值.?
方法二:(推薦)?
1.先生成安裝包,記下ProductCode(選擇解決方案資源管理器根目錄如setup1,再查看屬性標(biāo)簽,不是右鍵中的屬性),下面要用到?
2.用VS.net建立一個(gè)新的控制臺(tái)程序uninst.exe文件?
'power?by:?landlordh?
'for?2000,xp,2003?
Module?uninstall?
Sub?Main()?
Dim?myProcess?As?Process?=?New?Process?
If?System.Environment.OSVersion.ToString.IndexOf("NT?5")?Then?
myProcess.Start("msiexec",?"/X{2B65D4A9-C146-4808-AB4B-321FB0779559}")?'改為自己的ProductCode?
End?If?
myProcess.Close()?
End?Sub?
End?Module?
3.將控制臺(tái)程序BIN目錄的exe文件加入到打包程序文件中,在程序組創(chuàng)建uninst.exe的快捷方式?
附:?
installdb.vb類,要添加引用?system.configuration.install.dll?:?
Imports?System.ComponentModel?
Imports?System.Configuration.Install?
Public?Class?Installer1?
Inherits?System.Configuration.Install.Installer?
#Region?"?組件設(shè)計(jì)器生成的代碼?"?
Public?Sub?New()?
MyBase.New()?
'該調(diào)用是組件設(shè)計(jì)器所必需的。?
InitializeComponent()?
'在?InitializeComponent()?調(diào)用之后添加任何初始化?
End?Sub?
'Installer?重寫?dispose?以清理組件列表。?
Protected?Overloads?Overrides?Sub?Dispose(ByVal?disposing?As?Boolean)?
If?disposing?Then?
If?Not?(components?Is?Nothing)?Then?
components.Dispose()?
End?If?
End?If?
MyBase.Dispose(disposing)?
End?Sub?
'組件設(shè)計(jì)器所必需的?
Private?components?As?System.ComponentModel.IContainer?
'注意:?以下過(guò)程是組件設(shè)計(jì)器所必需的?
'可以使用組件設(shè)計(jì)器來(lái)修改此過(guò)程。?
'不要使用代碼編輯器來(lái)修改它。?
Private?Sub?InitializeComponent()?
components?=?New?System.ComponentModel.Container?
End?Sub?
#End?Region?
Public?Overrides?Sub?Install(ByVal?stateSaver?As?System.Collections.IDictionary)?
MyBase.Install(stateSaver)?
If?Not?InstallDB()?Then?
'失敗,反安裝?
Me.Uninstall(stateSaver)?
Exit?Sub?
End?If?
DeleteFile(String.Format("{0}DB.dat",?Me.Context.Parameters.Item("targetdir")))?
End?Sub?
Public?Overrides?Sub?Uninstall(ByVal?stateSaver?As?System.Collections.IDictionary)?
'執(zhí)行反安裝?
MyBase.Uninstall(stateSaver)?
DeleteFile(String.Format("{0}DB.dat",?Me.Context.Parameters.Item("targetdir")))?
End?Sub?
Private?Sub?DeleteFile(ByVal?paths?As?String)?
'刪除指定的文件?
Try?
Dim?delFile?As?New?System.IO.FileInfo(paths)?
If?delFile.Exists?Then?
delFile.Delete()?
End?If?
Catch?ex?As?Exception?
End?Try?
End?Sub?
Private?Sub?CreateSql(ByVal?paths?As?String)?
Dim?File?As?System.IO.StreamWriter?
Dim?db?As?String?=?String.Format("{0}",?Me.Context.Parameters.Item("dbname"))?
Dim?path?As?String?=?String.Format("{0}",?Me.Context.Parameters.Item("targetdir"))?
Try?
Dim?s?As?New?System.Text.StringBuilder?
s.Append("use?master"?&?vbCrLf)?
s.Append(""?&?vbCrLf)?
s.Append("if?not?exists?(select?*?from?sysdatabases?where?name='"?&?db?&?"')"?&?vbCrLf)?
s.Append("?BEGIN"?&?vbCrLf)?
s.Append("?create?database?"?&?db?&?vbCrLf)?
s.Append("?END"?&?vbCrLf)?
s.Append(""?&?vbCrLf)?
s.Append("if?exists?(select?*?from?sysdevices?where?name='DBdisk')"?&?vbCrLf)?
s.Append("?BEGIN"?&?vbCrLf)?
s.Append("?EXEC?sp_dropdevice?'DBdisk'"?&?vbCrLf)?
s.Append("?END"?&?vbCrLf)?
s.Append("Else"?&?vbCrLf)?
s.Append("?BEGIN"?&?vbCrLf)?
s.Append("?EXEC?sp_addumpdevice?'disk','DBdisk',?'"?&?path?&?"DB.dat'"?&?vbCrLf)?
s.Append("?END"?&?vbCrLf)?
s.Append(""?&?vbCrLf)?
s.Append("restore?database?"?&?db?&?vbCrLf)?
s.Append("from?disk='"?&?path?&?"DB.dat'"?&?vbCrLf)?
s.Append("with?replace")?
File?=?New?System.IO.StreamWriter(paths)?
File.Write(s.ToString)?
Catch?ex?As?Exception?
Finally?
File.Close()?
End?Try?
End?Sub?
Private?Function?InstallDB()?As?Boolean?
'安裝數(shù)據(jù)庫(kù),調(diào)用自動(dòng)批處理。?
Try?
'創(chuàng)建臨時(shí)腳本?
CreateSql(String.Format("{0}Mydb2000tp.sql",?Me.Context.Parameters.Item("targetdir")))?
'調(diào)用osql執(zhí)行腳本?
Dim?sqlProcess?As?New?System.Diagnostics.Process?
sqlProcess.StartInfo.FileName?=?"osql.exe"?
sqlProcess.StartInfo.Arguments?=?String.Format("?-U?{0}?-P?{1}?-S?{2}?-i?{3}Mydb2000tp.sql",?Me.Context.Parameters.Item("user"),?Me.Context.Parameters.Item("pwd"),?Me.Context.Parameters.Item("server"),?Me.Context.Parameters.Item("targetdir"))?
sqlProcess.StartInfo.WindowStyle?=?ProcessWindowStyle.Hidden?
sqlProcess.Start()?
sqlProcess.WaitForExit()?'等待執(zhí)行?
sqlProcess.Close()?
'刪除腳本文件?
DeleteFile(String.Format("{0}Mydb2000tp.sql",?Me.Context.Parameters.Item("targetdir")))?
Return?True?
Catch?ex?As?Exception?
Return?False?
End?Try?
End?Function?
End?Class
1.?在“文件”菜單上指向“添加項(xiàng)目”,然后選擇“新建項(xiàng)目”。?
2.?在“添加新項(xiàng)目”對(duì)話框中,選擇“項(xiàng)目類型”窗格中的“安裝和部署項(xiàng)目”,然后選擇“模板”窗格中的“安裝項(xiàng)目”。在“名稱”框中鍵入?setup1。?
3.?單擊“確定”關(guān)閉對(duì)話框。?
4.?項(xiàng)目被添加到解決方案資源管理器中,并且文件系統(tǒng)編輯器打開。?
5.?在“屬性”窗口中,選擇?ProductName?屬性,并鍵入?信息管理系統(tǒng)?。?
二).將?主程序?項(xiàng)目的輸出添加到部署項(xiàng)目中?
1.?在“文件系統(tǒng)編輯器”中,選擇“應(yīng)用程序文件夾”。在“操作”菜單上,指向“添加”,然后選擇“項(xiàng)目輸出”。?
2.?在“添加項(xiàng)目輸出組”對(duì)話框中,選擇“項(xiàng)目”下拉列表中的“你的程序”。?
3.?單擊“確定”關(guān)閉對(duì)話框。?
4.?從列表中選擇“主輸出”和“內(nèi)容文件”組,然后單擊“確定”。?
三).創(chuàng)建安裝程序類?
1.?在“文件”菜單上指向“新建”,然后選擇“項(xiàng)目”。?
2.?在“新建項(xiàng)目”對(duì)話框中,選擇“項(xiàng)目類型”窗格中的“Visual?Basic?項(xiàng)目”,然后選擇“模板”窗格中的“類庫(kù)”。在“名稱”框中鍵入?installDB。?
3.?單擊“打開”關(guān)閉對(duì)話框。?
4.?從“項(xiàng)目”菜單中選擇“添加新項(xiàng)”。?
5.?在“添加新項(xiàng)”對(duì)話框中選擇“安裝程序類”。在“名稱”框中鍵入?installDB。?
6.?單擊“確定”關(guān)閉對(duì)話框。?
7.?詳細(xì)代碼附后。?
四).創(chuàng)建自定義安裝對(duì)話框?
1.?在解決方案資源管理器中選擇“setup1”項(xiàng)目。在“視圖”菜單上指向“編輯器”,然后選擇“用戶界面”。?
2.?在用戶界面編輯器中,選擇“安裝”下的“啟動(dòng)”節(jié)點(diǎn)。在“操作”菜單上,選擇“添加對(duì)話框”。?
3.?在“添加對(duì)話框”對(duì)話框中,選擇“許可協(xié)議”對(duì)話框,然后單擊“確定”關(guān)閉對(duì)話框。?
4.?在“添加對(duì)話框”對(duì)話框中,選擇“文本框?(A)”對(duì)話框,然后單擊“確定”關(guān)閉對(duì)話框。?
5.?在“操作”菜單上,選擇“上移”。重復(fù)此步驟,直到“文本框?(A)”對(duì)話框位于“安裝文件夾”節(jié)點(diǎn)之上。?
6.?在“屬性”窗口中,選擇?BannerText?屬性并鍵入:安裝數(shù)據(jù)庫(kù).?
7.?選擇?BodyText?屬性并鍵入:安裝程序?qū)⒃谀繕?biāo)機(jī)器上安裝數(shù)據(jù)庫(kù)?
8.?選擇?Edit1Label?屬性并鍵入:數(shù)據(jù)庫(kù)名稱:?
9.?選擇?Edit1Property?屬性并鍵入?CUSTOMTEXTA1?
10.?選擇?Edit1Value?屬性并鍵入:dbservers?
11.?選擇?Edit2Label?屬性并鍵入:服務(wù)器名:?
12.?選擇?Edit2Property?屬性并鍵入?CUSTOMTEXTA2?
13.?選擇?Edit2Value?屬性并鍵入:(local)?
14.?選擇?Edit3Label?屬性并鍵入:用戶名:?
15.?選擇?Edit3Value?屬性并鍵入:sa?
16.?選擇?Edit3Property?屬性并鍵入?CUSTOMTEXTA3?
17.?選擇?Edit4Label?屬性并鍵入:密碼:?
18.?選擇?Edit4Property?屬性并鍵入?CUSTOMTEXTA4?
19.?選擇?Edit2Visible、Edit3Visible?和?Edit4Visible?屬性,并將它們?cè)O(shè)置為?true?
五).創(chuàng)建自定義操作?
1.?在解決方案資源管理器中選擇“setup1”項(xiàng)目。在“視圖”菜單上指向“編輯器”,然后選擇“自定義操作”。?
2.?在自定義操作編輯器中選擇“安裝”節(jié)點(diǎn)。在“操作”菜單上,選擇“添加自定義操作”。?
3.?在“選擇項(xiàng)目中的項(xiàng)”對(duì)話框中,雙擊“應(yīng)用程序文件夾”。?
4.?選擇“主輸出來(lái)自?installDB(活動(dòng))”項(xiàng),然后單擊“確定”關(guān)閉對(duì)話框。?
5.?在“屬性”窗口中,選擇?CustomActionData?屬性并鍵入“/dbname=[CUSTOMTEXTA1]?/server=[CUSTOMTEXTA2]?/user=[CUSTOMTEXTA3]?/pwd=[CUSTOMTEXTA4]?/targetdir="[TARGETDIR]\"”。?
附:/targetdir="[TARGETDIR]\"是安裝后的目標(biāo)路徑,為了在installDB類中獲得安裝后的路徑,我們?cè)O(shè)置此參數(shù)。?
六).添加文件?
1.?將SQL?Server備份成文件DB.dat添加到“setup1”項(xiàng)目(在企業(yè)管理器中右擊數(shù)據(jù)庫(kù)->所有工作->備份數(shù)據(jù)庫(kù),備份成一個(gè)文件,取名為DB.dat)?
2.?將安裝文件LisenceFile.rtf添加到“setup1”項(xiàng)目?
3.?在用戶界面編輯器中,選擇許可協(xié)議,設(shè)置LisenceFile屬性為L(zhǎng)isenceFile.rtf文件?
4.一般會(huì)自動(dòng)將依賴項(xiàng)添加到“檢測(cè)到的依賴項(xiàng)”,如果沒(méi)有,那么我們要手動(dòng)將其加入步驟5)?
Crystal_Managed2003.msm?(如果有水晶報(bào)表)?
dotnetfxredist_x86.msm?(.net一定是必須的)?
?(如果有引用其他的dll)?
5.如果使用了水晶報(bào)表,手動(dòng)加入要包含的文件:項(xiàng)目-->添加-->合并模塊(添加你的程序文件)?(包括dotNetFramework和MDAC27),位于:C:\Program?Files\Common?Files\Merge?Modules\?下,*為必要的?
具體功能如下:?
(托管組件?MSM?處理所有托管組件的分發(fā),其中包括?Windows?窗體查看器、Web?窗體查看器和所有?Crystal?Decisions?命名空間)?
*?Crystal_Managed2003.msm?
Crystal_Managed2003_chs.msm?
(對(duì)于使報(bào)表運(yùn)行所需的所有其他文件,由數(shù)據(jù)庫(kù)訪問(wèn)?MSM?處理其分發(fā)。其中包括數(shù)據(jù)庫(kù)、導(dǎo)出和圖表驅(qū)動(dòng)程序。)?
*?Crystal_Database_access2003.msm?
Crystal_Database_access2003_chs.msm?
(KeyCode?MSM?處理?Crystal?Decisions?密鑰號(hào)碼的安裝,注意是添加合并模塊,否則沒(méi)有“MergeMouduleProperties”屬性)?
*?Crystal_regwiz2003.msm?
(如果報(bào)表文件使用了?ADO.NET?的?dataset?數(shù)據(jù)集對(duì)象,那么?VC_User_CRT71_RTL_X86_---.msm?和?VC_User_STL71_RTL_X86_---.msm?模塊也必須包含在安裝工程中。而且這兩個(gè)模塊的文件安裝屬性的"Module?Retargetable?Folder"項(xiàng)必須修改成為系統(tǒng)目錄)?
VC_User_CRT71_RTL_X86_---.msm?
VC_User_STL71_RTL_X86_---.msm?
(很多人經(jīng)常出現(xiàn)查詢錯(cuò)誤,不妨加上這個(gè))?
5.打開解決方案-->右鍵點(diǎn)擊Crystal_regwiz2003.msm的屬性,在“MergeMouduleProperties”里的“License?Key”填入:AAP5GKS0000GDE100DS(這個(gè)是你生成Crystal?Report是用到的注冊(cè)號(hào)的密碼!)?
七).打包時(shí)加入卸載功能:?
方法一:?
1.在打包項(xiàng)目中添加文件msiexec.exe(一般可在c:\windows\system32\下找到)?
2.在文件系統(tǒng)視圖中選擇應(yīng)用程序文件夾,在msiexec.exe上按右鍵,選擇創(chuàng)建快捷方式,重命名快捷方式為"卸載".?
3.更改此快捷方式的Arguments?為"/x?{產(chǎn)品id}",產(chǎn)品id的值為打包項(xiàng)目的ProductCode屬性值.?
方法二:(推薦)?
1.先生成安裝包,記下ProductCode(選擇解決方案資源管理器根目錄如setup1,再查看屬性標(biāo)簽,不是右鍵中的屬性),下面要用到?
2.用VS.net建立一個(gè)新的控制臺(tái)程序uninst.exe文件?
'power?by:?landlordh?
'for?2000,xp,2003?
Module?uninstall?
Sub?Main()?
Dim?myProcess?As?Process?=?New?Process?
If?System.Environment.OSVersion.ToString.IndexOf("NT?5")?Then?
myProcess.Start("msiexec",?"/X{2B65D4A9-C146-4808-AB4B-321FB0779559}")?'改為自己的ProductCode?
End?If?
myProcess.Close()?
End?Sub?
End?Module?
3.將控制臺(tái)程序BIN目錄的exe文件加入到打包程序文件中,在程序組創(chuàng)建uninst.exe的快捷方式?
附:?
installdb.vb類,要添加引用?system.configuration.install.dll?:?
Imports?System.ComponentModel?
Imports?System.Configuration.Install?
Public?Class?Installer1?
Inherits?System.Configuration.Install.Installer?
#Region?"?組件設(shè)計(jì)器生成的代碼?"?
Public?Sub?New()?
MyBase.New()?
'該調(diào)用是組件設(shè)計(jì)器所必需的。?
InitializeComponent()?
'在?InitializeComponent()?調(diào)用之后添加任何初始化?
End?Sub?
'Installer?重寫?dispose?以清理組件列表。?
Protected?Overloads?Overrides?Sub?Dispose(ByVal?disposing?As?Boolean)?
If?disposing?Then?
If?Not?(components?Is?Nothing)?Then?
components.Dispose()?
End?If?
End?If?
MyBase.Dispose(disposing)?
End?Sub?
'組件設(shè)計(jì)器所必需的?
Private?components?As?System.ComponentModel.IContainer?
'注意:?以下過(guò)程是組件設(shè)計(jì)器所必需的?
'可以使用組件設(shè)計(jì)器來(lái)修改此過(guò)程。?
'不要使用代碼編輯器來(lái)修改它。?
Private?Sub?InitializeComponent()?
components?=?New?System.ComponentModel.Container?
End?Sub?
#End?Region?
Public?Overrides?Sub?Install(ByVal?stateSaver?As?System.Collections.IDictionary)?
MyBase.Install(stateSaver)?
If?Not?InstallDB()?Then?
'失敗,反安裝?
Me.Uninstall(stateSaver)?
Exit?Sub?
End?If?
DeleteFile(String.Format("{0}DB.dat",?Me.Context.Parameters.Item("targetdir")))?
End?Sub?
Public?Overrides?Sub?Uninstall(ByVal?stateSaver?As?System.Collections.IDictionary)?
'執(zhí)行反安裝?
MyBase.Uninstall(stateSaver)?
DeleteFile(String.Format("{0}DB.dat",?Me.Context.Parameters.Item("targetdir")))?
End?Sub?
Private?Sub?DeleteFile(ByVal?paths?As?String)?
'刪除指定的文件?
Try?
Dim?delFile?As?New?System.IO.FileInfo(paths)?
If?delFile.Exists?Then?
delFile.Delete()?
End?If?
Catch?ex?As?Exception?
End?Try?
End?Sub?
Private?Sub?CreateSql(ByVal?paths?As?String)?
Dim?File?As?System.IO.StreamWriter?
Dim?db?As?String?=?String.Format("{0}",?Me.Context.Parameters.Item("dbname"))?
Dim?path?As?String?=?String.Format("{0}",?Me.Context.Parameters.Item("targetdir"))?
Try?
Dim?s?As?New?System.Text.StringBuilder?
s.Append("use?master"?&?vbCrLf)?
s.Append(""?&?vbCrLf)?
s.Append("if?not?exists?(select?*?from?sysdatabases?where?name='"?&?db?&?"')"?&?vbCrLf)?
s.Append("?BEGIN"?&?vbCrLf)?
s.Append("?create?database?"?&?db?&?vbCrLf)?
s.Append("?END"?&?vbCrLf)?
s.Append(""?&?vbCrLf)?
s.Append("if?exists?(select?*?from?sysdevices?where?name='DBdisk')"?&?vbCrLf)?
s.Append("?BEGIN"?&?vbCrLf)?
s.Append("?EXEC?sp_dropdevice?'DBdisk'"?&?vbCrLf)?
s.Append("?END"?&?vbCrLf)?
s.Append("Else"?&?vbCrLf)?
s.Append("?BEGIN"?&?vbCrLf)?
s.Append("?EXEC?sp_addumpdevice?'disk','DBdisk',?'"?&?path?&?"DB.dat'"?&?vbCrLf)?
s.Append("?END"?&?vbCrLf)?
s.Append(""?&?vbCrLf)?
s.Append("restore?database?"?&?db?&?vbCrLf)?
s.Append("from?disk='"?&?path?&?"DB.dat'"?&?vbCrLf)?
s.Append("with?replace")?
File?=?New?System.IO.StreamWriter(paths)?
File.Write(s.ToString)?
Catch?ex?As?Exception?
Finally?
File.Close()?
End?Try?
End?Sub?
Private?Function?InstallDB()?As?Boolean?
'安裝數(shù)據(jù)庫(kù),調(diào)用自動(dòng)批處理。?
Try?
'創(chuàng)建臨時(shí)腳本?
CreateSql(String.Format("{0}Mydb2000tp.sql",?Me.Context.Parameters.Item("targetdir")))?
'調(diào)用osql執(zhí)行腳本?
Dim?sqlProcess?As?New?System.Diagnostics.Process?
sqlProcess.StartInfo.FileName?=?"osql.exe"?
sqlProcess.StartInfo.Arguments?=?String.Format("?-U?{0}?-P?{1}?-S?{2}?-i?{3}Mydb2000tp.sql",?Me.Context.Parameters.Item("user"),?Me.Context.Parameters.Item("pwd"),?Me.Context.Parameters.Item("server"),?Me.Context.Parameters.Item("targetdir"))?
sqlProcess.StartInfo.WindowStyle?=?ProcessWindowStyle.Hidden?
sqlProcess.Start()?
sqlProcess.WaitForExit()?'等待執(zhí)行?
sqlProcess.Close()?
'刪除腳本文件?
DeleteFile(String.Format("{0}Mydb2000tp.sql",?Me.Context.Parameters.Item("targetdir")))?
Return?True?
Catch?ex?As?Exception?
Return?False?
End?Try?
End?Function?
End?Class
總結(jié)
以上是生活随笔為你收集整理的C#项目打包,并自动安装SQL数据库(转)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 记录要点
- 下一篇: 使用C#开发ActiveX控件[Obso