手把手教你實(shí)現(xiàn).NET程序打包
1、在這個(gè)安裝包制作的過(guò)程中,所用到的一些圖片或者文件,如:快捷鍵圖片,安裝步驟中每個(gè)圖形界面的背景圖片等都要事先在[應(yīng)用程序文件夾]中事先添加好這些圖片,即在安裝項(xiàng)目中添加這些圖片,文件好像是解決方案下debug下的所有文件都拷貝,如exe、config、rpt還有圖片等
2、安裝包中的那個(gè)Install里面的方法的執(zhí)行時(shí)間是在:所以的文件都安裝好了后再執(zhí)行其中的號(hào)碼。如客戶(hù)端安裝是在配置文件已經(jīng)裝好了后,但是其中的配置節(jié)還沒(méi)有信息,但是在代碼中賦值之后就有了,還有服務(wù)器也一樣,如數(shù)據(jù)庫(kù)也一樣,首先是拷貝到客戶(hù)端電腦上,然后再執(zhí)行install中的代碼,。獲取硬盤(pán)上的數(shù)據(jù)庫(kù)文件,然后再在數(shù)據(jù)庫(kù)中創(chuàng)建,并且引用到這個(gè)數(shù)據(jù)庫(kù)文件
***、給安裝項(xiàng)目添加必要的文件,貌似是應(yīng)用程序debug文件夾下的所有文件,還有是安裝系統(tǒng)要用的圖片文件
第二、添加系統(tǒng)必備:安裝項(xiàng)目右鍵->屬性->選擇系統(tǒng)必備,
必選上[數(shù)據(jù)訪(fǎng)問(wèn)組件]、[.net 2.0]、[windows installer 3.1]。如果應(yīng)用程序中有rpt的報(bào)表就要加上報(bào)表引擎
其中【指定系統(tǒng)必備組件的安裝位置】要選擇第二個(gè),【從與我的應(yīng)用程序相同的位置下載系統(tǒng)必備組件】
(第三)選擇應(yīng)用程序文件夾。右鍵添加項(xiàng)目輸出項(xiàng)。將應(yīng)用程序設(shè)置為主輸出
第三、添加卸載程序
打開(kāi)系統(tǒng)目錄C:\WINDOWS\system32找到文件msiexec.exe,復(fù)制到剛創(chuàng)建的安裝項(xiàng)目文件系統(tǒng)視圖的應(yīng)用程序文件夾中。
第四、創(chuàng)建【用戶(hù)的'程序'菜單(包括安裝和卸載)】
首先創(chuàng)建一個(gè)文件夾,然后在文件夾里創(chuàng)建下面兩個(gè),因?yàn)檫@個(gè)文件夾就是在開(kāi)始菜單->程序->該文件夾->安裝和卸載
1、創(chuàng)建卸載快捷鍵(先選擇程序,然后配屬性):
選擇【用戶(hù)的'程序'菜單】->在中間空白地方右鍵【創(chuàng)建快捷鍵】->選擇msiexec.exe->右鍵快捷鍵選擇屬性->修改Name和ICON->配置Arguments屬性。
配置Arguments屬性的方法是:?jiǎn)螕舭惭b項(xiàng)目,是左鍵單擊,然后找到ProductCode,復(fù)制下來(lái),然后Arguments=/x ProductCode(這里注意有個(gè)空格)。
2、創(chuàng)建安裝快捷鍵(也是先選擇程序,然后配屬性):
選擇【用戶(hù)的'程序'菜單】->在中間空白地方右鍵【創(chuàng)建快捷鍵】->選擇[應(yīng)用程序的exe文件]->右鍵快捷鍵選擇屬性->修改Name和ICON,且安裝不需要 配Arguments屬性
3、在【用戶(hù)桌面】中重復(fù)第2步的操作
第五、添加用戶(hù)操作界面
右鍵安裝項(xiàng)目->視圖->用戶(hù)界面:
安裝的過(guò)程無(wú)非就是:?jiǎn)?dòng)->進(jìn)度->結(jié)束
給啟動(dòng)添加一個(gè)【文本框A】,并且將它上移到安裝文件夾的上面(安裝程序運(yùn)行的時(shí)候就是按著上面的順序運(yùn)行的)
->右鍵這個(gè)【文本框A】,填寫(xiě)其中的值
第六、添加自定義操作
為安裝解決方案添加一個(gè)類(lèi)庫(kù)項(xiàng)目,刪除Class1.cs
為類(lèi)庫(kù)項(xiàng)目添加一個(gè)【安裝程序類(lèi)】->Installer1
第七、完成將我們自定義的安裝類(lèi)接入到安裝過(guò)程:
1、將我們新建的類(lèi)庫(kù)作為主輸出添加到安裝項(xiàng)目中
選擇【應(yīng)用程序文件夾】,在中間空白部分右鍵選擇【添加項(xiàng)目輸出】將設(shè)置新建的類(lèi)庫(kù)作為主輸出
2、打開(kāi)安裝項(xiàng)目的“自定義操作視圖”然后在相應(yīng)(安裝、卸載和回滾等)的節(jié)點(diǎn)上“右鍵”添加自定義操作《選擇主輸出》
右鍵選擇【CustomActionData】
/PassWord=[PASSWORD] /UserName=[USERNAME] /Server=[SERVER] /TargetDir="[TARGETDIR]\"
(注:/targetdir="[TARGETDIR]\"傳遞安裝目錄的路徑、[PASSWORD]等這些是我們?cè)谟脩?hù)界面上設(shè)置的文本框的屬性)
第八、再次完善新建的類(lèi)庫(kù),給其中添加方法
1、重寫(xiě)安裝函數(shù)public override void Install(System.Collections.IDictionary stateSaver)
2、重寫(xiě)卸載函數(shù)public override void Uninstall(IDictionary savedState)
3、重寫(xiě)安裝完成后函數(shù) protected override void OnAfterInstall(IDictionary savedState)
完成
附加:如果我們想在程序卸載的時(shí)候保留某些文件則需要配置這些文件的屬性如下即可:即:Permanent為true
在安裝的的過(guò)程中,在應(yīng)用程序(不是安裝解決方案)有些圖片文件或者rpt文件也要放在安裝后的文件夾中那么就這樣設(shè)置
將應(yīng)用程序中的這些文件的一個(gè)屬性【復(fù)制到輸出目錄】屬性為:
”如果較新則復(fù)制”或者“始終復(fù)制”,同時(shí)在安裝項(xiàng)目中添加winfrom項(xiàng)目的“內(nèi)容文件輸出”則在安裝包生成過(guò)程中自動(dòng)復(fù)制文件到安裝包中。
附加2、卸載方法二:(推薦)
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-321FB077955
- 9}") '改為自己的ProductCode
- End If
- myProcess.Close()
- End Sub
- End Module
3.將控制臺(tái)程序BIN目錄的exe文件加入到打包程序文件中,在程序組創(chuàng)建uninst.exe的快捷
方式
附加3、可以再安裝類(lèi)庫(kù)項(xiàng)目中再建立一個(gè)winform窗體程序,然后在安裝類(lèi)中調(diào)用,因?yàn)槲覀冊(cè)诎惭b項(xiàng)目中添加了一個(gè)文本框A其實(shí)目的就是更改config文件,那么這里再建立一個(gè)winform項(xiàng)目的話(huà)也可以實(shí)現(xiàn)同樣的效果,而且還可以進(jìn)行更好看的界面
安裝包的版本升級(jí),每次升級(jí)一定要設(shè)置Vesion這個(gè)屬性和ProductCode這個(gè)屬性,同時(shí)也要設(shè)置卸載圖標(biāo)的那個(gè)屬性,否則當(dāng)再次安裝的時(shí)候會(huì)提示你到控制面板中刪除,然后每次升級(jí)的時(shí)候版本號(hào)要比上個(gè)版本號(hào)要高,否則的話(huà)會(huì)提示你不能安裝,這種情況只能手動(dòng)卸載掉電腦上的應(yīng)用程序然后再進(jìn)行安裝
原文鏈接:http://www.cnblogs.com/kuyijie/archive/2011/01/05/1926670.html
【編輯推薦】
- .NET 3.5擴(kuò)展方法點(diǎn)評(píng):優(yōu)點(diǎn)與問(wèn)題
- 一個(gè).NET調(diào)用PHP Web Service的典型例子
- .NET 4.0的ICustomQueryInterface新特性
- 在.NET反應(yīng)性框架中實(shí)現(xiàn)LINQ
- .NET 3.5擴(kuò)展方法和Lambda表達(dá)式