一.創建部署.NET打包項目
1. 在“文件”菜單上指向“添加項目”,然后選擇“新建項目”。
2.?在“添加新項目”對話框中,選擇“項目類型”窗格中的“安裝和部署項目”,然后選擇“模板”窗格中的“安裝項目”。在“名稱”框中鍵入 setup。
3.?單擊“確定”關閉對話框。
?
4.?項目被添加到解決方案資源管理器中,并且文件系統編輯器打開。
?
5.?在“屬性”窗口中,選擇 ProductName 屬性,并鍵入?[ 項目名稱 ] 。
?
二.將主程序項目的輸出添加到部署項目中
?
1.?在“文件系統編輯器”中,選擇“應用程序文件夾”。在“操作”菜單上,指向“添加”,然后選擇“項目輸出”。
?
2.?在“添加項目輸出組”對話框中,選擇“項目”下拉列表中的“你的程序”。
?
3.?單擊“確定”關閉對話框。
?
4.?從列表中選擇“主輸出”和“內容文件”組,然后單擊“確定”。
?
三.創建安裝程序類
?
1.?在“文件”菜單上指向“新建”,然后選擇“項目”。
?
2.?在“新建項目”對話框中,選擇“項目類型”窗格中的“Visual Basic 項目”,然后選擇“模板”窗格中的“類庫”。在“名稱”框中鍵入 installDB。
?
3.?單擊“打開”關閉對話框。
?
4.?從“項目”菜單中選擇“添加新項”。
?
5.?在“添加新項”對話框中選擇“安裝程序類”。在“名稱”框中鍵入 installDB。
?
6.?單擊“確定”關閉對話框。
?
7.?詳細代碼附后。
?
四.創建自定義安裝對話框
?
1.?在解決方案資源管理器中選擇“setup1”項目。在“視圖”菜單上指向“編輯器”,然后選擇“用戶界面”。
2.?在用戶界面編輯器中,選擇“安裝”下的“啟動”節點。在“操作”菜單上,選擇“添加對話框”。
3.?在“添加對話框”對話框中,選擇“許可協議”對話框,然后單擊“確定”關閉對話框。
4.?在“添加對話框”對話框中,選擇“文本框 (A)”對話框,然后單擊“確定”關閉對話框。
5.?在“操作”菜單上,選擇“上移”。重復此步驟,直到“文本框 (A)”對話框位于“安裝文件夾”節點之上。
6.?在“屬性”窗口中,選擇 BannerText 屬性并鍵入:安裝數據庫.
7.?選擇 BodyText 屬性并鍵入:安裝程序將在目標機器上安裝數據庫
8.?選擇 Edit1Label 屬性并鍵入:數據庫名稱:
9.?選擇 Edit1Property 屬性并鍵入 CUSTOMTEXTA1
10.?選擇 Edit1Value 屬性并鍵入:dbservers
11.?選擇 Edit2Label 屬性并鍵入:服務器名:
12.?選擇 Edit2Property 屬性并鍵入 CUSTOMTEXTA2
13.?選擇 Edit2Value 屬性并鍵入:(local)
14.?選擇 Edit3Label 屬性并鍵入:用戶名:
15.?選擇 Edit3Value 屬性并鍵入:sa
16.?選擇 Edit3Property 屬性并鍵入 CUSTOMTEXTA3
17.?選擇 Edit4Label 屬性并鍵入:密碼:
18.?選擇 Edit4Property 屬性并鍵入 CUSTOMTEXTA4
19.?選擇 Edit2Visible、Edit3Visible 和 Edit4Visible 屬性,并將它們設置為 true
?
五.創建自定義操作
?
1.?在解決方案資源管理器中選擇“setup1”項目。在“視圖”菜單上指向“編輯器”,然后選擇“自定義操作”。
2.?在自定義操作編輯器中選擇“安裝”節點。在“操作”菜單上,選擇“添加自定義操作”。
3.?在“選擇項目中的項”對話框中,雙擊“應用程序文件夾”。
4.?選擇“主輸出來自 installDB(活動)”項,然后單擊“確定”關閉對話框。
5.?在“屬性”窗口中,選擇 CustomActionData 屬性并鍵入“/dbname=[CUSTOMTEXTA1] /server=[CUSTOMTEXTA2] /user=[CUSTOMTEXTA3] /pwd=[CUSTOMTEXTA4] /targetdir="[TARGETDIR]\"”。
?
附:/targetdir="[TARGETDIR]\"是安裝后的目標路徑,為了在installDB類中獲得安裝后的路徑,我們設置此參數。
?
六 .NET打包時加入卸載功能:
?
方法一:
1.在.NET打包項目中添加文件msiexec.exe(一般可在c:\windows\system32\下找到)
2.在文件系統視圖中選擇應用程序文件夾,在msiexec.exe上按右鍵,選擇創建快捷方式,重命名快捷方式為"卸載".
3.更改此快捷方式的Arguments 為"/x {產品id}",產品id的值為打包項目的ProductCode屬性值.
1.在.NET打包項目中添加文件msiexec.exe(一般可在c:\windows\system32\下找到)
2.在文件系統視圖中選擇應用程序文件夾,在msiexec.exe上按右鍵,選擇創建快捷方式,重命名快捷方式為"卸載".
3.更改此快捷方式的Arguments 為"/x {產品id}",產品id的值為打包項目的ProductCode屬性值.
?
方法二:(推薦)
1.先生成安裝包,記下ProductCode(選擇解決方案資源管理器根目錄如setup1,再查看屬性標簽,不是右鍵中的屬性),下面要用到
2.用VS.net建立一個新的控制臺程序uninst.exe文件
1.先生成安裝包,記下ProductCode(選擇解決方案資源管理器根目錄如setup1,再查看屬性標簽,不是右鍵中的屬性),下面要用到
2.用VS.net建立一個新的控制臺程序uninst.exe文件
3.將控制臺程序BIN目錄的exe文件加入到打包程序文件中,在程序組創建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 ?
?
installdb.vb類,要添加引用 system.configuration.install.dll :
- usingSystem; ?
- usingSystem.Collections; ?
- usingSystem.ComponentModel; ?
- usingSystem.Configuration.Install; ?
- usingSystem.Reflection; ?
- usingSystem.IO; ?
- usingSystem.Data; ?
- usingSystem.Data.SqlClient; ?
- namespaceinstall{ ?
- /// ?
- ///Installer1的摘要說明。 ?
- /// ?
- [RunInstaller(true)] ?
- publicclassInstaller1:System.Configuration.Install.Installer{ ?
- /// ?
- ///必需的設計器變量。 ?
- /// ?
- privateSystem.ComponentModel.Containercomponents = null ; ?
- publicInstaller1(){ ?
- //該調用是設計器所必需的。 ?
- InitializeComponent(); ?
- //TODO:在InitializeComponent調用后添加任何初始化 ?
- } ?
- /// ?
- ///清理所有正在使用的資源。 ?
- /// ?
- protectedoverridevoidDispose(booldisposing){ ?
- if(disposing){ ?
- if(components!=null){ ?
- components.Dispose(); ?
- } ?
- } ?
- base.Dispose(disposing); ?
- } ?
- ?
- #region組件設計器生成的代碼 ?
- /// ?
- ///設計器支持所需的方法-不要使用代碼編輯器修改 ?
- ///此方法的內容。 ?
- /// ?
- privatevoidInitializeComponent(){ ?
- components = newSystem .ComponentModel.Container(); ?
- } ?
- #endregion ?
- privatestringGetSql(stringName){ ?
- ////調用osql執行腳本 ?
- // ?
- // System.Diagnostics.ProcesssqlProcess = newSystem .Diagnostics.Process(); ?
- // ?
- // sqlProcess.StartInfo.FileName = "osql.exe" ; ?
- // ?
- // sqlProcess.StartInfo.Arguments = String .Format("-U{0}-P{1}-d{2}-i{3}db.sql",
this.Context.Parameters["user"],this.Context.Parameters["pwd"],"master",this.
Context.Parameters["targetdir"]); ?- // ?
- // sqlProcess.StartInfo.WindowStyle = System .Diagnostics.ProcessWindowStyle.Hidden; ?
- // ?
- //sqlProcess.Start(); ?
- // ?
- //sqlProcess.WaitForExit();//等待執行 ?
- // ?
- //sqlProcess.Close(); ?
- try{ ?
- // Assembly AssemblyAsm =Assembly.GetExecutingAssembly(); ?
- // System.IO.FileInfoFileInfo = newSystem .IO.FileInfo(Asm.Location); ?
- // stringpath = FileInfo .DirectoryName+@"\"+Name; ?
- stringpath = this .Context.Parameters["targetdir"]+Name; ?
- FileStreamfs = newFileStream (path,FileMode.Open,FileAccess.Read,FileShare.Read); ?
- StreamReaderreader = newStreamReader (fs,System.Text.Encoding.Default); ?
- //System.Text.Encoding.ASCII; ?
- returnreader.ReadToEnd(); ?
- } ?
- catch(Exceptionex){ ?
- Console.Write("InGetSql:"+ex.Message); ?
- throwex; ?
- } ?
- } ?
- privatevoidExecuteSql(stringDataBaseName,stringSql){ ?
- SqlConnectionsqlConnection1 = newSqlConnection (); ?
- sqlConnection1.ConnectionString = string .Format(" server ={0}; userid ={1}; password ={2};
- Database =master",this.Context.Parameters["server"],this.Context.Parameters["user"],
this.Context.Parameters[" pwd "]); ?- System.Data.SqlClient.SqlCommandCommand = newSystem .Data.SqlClient.
SqlCommand(Sql,sqlConnection1); ?- try{ ?
- Command.Connection.Open(); ?
- Command.Connection.ChangeDatabase(DataBaseName); ?
- Command.ExecuteNonQuery(); ?
- } ?
- catch(Exceptionex){ ?
- Console.Write("Inexceptionhandler:"+ex.Message); ?
- } ?
- finally{ ?
- Command.Connection.Close(); ?
- } ?
- } ?
- protectedvoidAddDBTable(stringstrDBName){ ?
- try{ ?
- ExecuteSql("master","CREATEDATABASE"+strDBName); ?
- ExecuteSql(strDBName,GetSql("sql.txt")); ?
- ExecuteSql("master","execsp_addlogin'myoamaster','myoamaster','"+strDBName+"',Null,Null"); ?
- ExecuteSql(strDBName,"EXECsp_grantdbaccess'myoamaster','myoamaster'"); ?
- ExecuteSql(strDBName,"execsp_addrolemember'db_owner','myoamaster'"); ?
- } ?
- catch(Exceptionex){ ?
- Console.Write("Inexceptionhandler:"+ex.Message); ?
- } ?
- } ?
- publicoverridevoidInstall(System.Collections.IDictionarystateSaver){ ?
- base.Install(stateSaver); ?
- AddDBTable(this.Context.Parameters["dbname"]); ?
- } ?
- } ?
- }?
這里有個sql.txt是數據庫的sql腳本,當然可以調用osql來執行sql腳本,其實是一樣的。打包的時候必須把sql.txt文件加進來,否則不會執行。如果你想附加數據庫的mdf文件和ldf文件,用下面這段程序:
當然.NET打包項目也要把這兩個數據庫文件也加進來。
- privatevoidCreateDataBase(stringstrSql,stringDataName,stringstrMdf,stringstrLdf) ?
- { ?
- Stringstr; ?
- SqlConnectionmyConn = newSqlConnection (strSql); ?
- //EXECsp_detach_db@ dbname = 'BX_FreightMileage_2' //需要先將數據庫分離出來 ?
- str = "EXECsp_attach_db@dbname='" +DataName+"',@ filename1 = '"+strMdf+"' ,@ filename2 = '"+strLdf+"' "; ?
- SqlCommandmyCommand = newSqlCommand (str,myConn); ?
- ?
- myConn.Open(); ?
- myCommand.ExecuteNonQuery(); ?
- myConn.Close(); ?
- ?
- }?
?
?
?
123
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
