VS.NET安装部署深入研究
??
????????相信很多人都做過安裝程序,目前最大功能最全的當(dāng)屬InstallShield,但是InstallShield的語法學(xué)習(xí)起來實(shí)在費(fèi)勁,
相對而言vs.net自帶的安裝部署短小精悍,且使用C#語法,對于一般C#開發(fā)者來說使用起來就極為簡便,在對其作了一些研究
之后,發(fā)現(xiàn)vs.net的安裝部署項(xiàng)目的功能也已經(jīng)非常好用,一般的程序安裝都可以輕松實(shí)現(xiàn),當(dāng)然,在研究的過程中也發(fā)現(xiàn)了
一些缺陷,這個(gè)后面再提。下面就向大家介紹一下ASP.NET安裝部署項(xiàng)目的一些復(fù)雜應(yīng)用實(shí)現(xiàn): 首先我們假設(shè)存在一個(gè)已經(jīng)完
工的web項(xiàng)目eHRM,其文件列表如圖
其中web.config中存在我們的數(shù)據(jù)庫連接及系統(tǒng)的一些其他配置,如數(shù)據(jù)庫類型等,這些配置需要在安裝時(shí)進(jìn)行修改。
OK,知道了我們的安裝對象,現(xiàn)在開始做安裝部署程序,首先,在解決方案中添加一個(gè)新項(xiàng)目,如圖,項(xiàng)目類型為Web安裝項(xiàng)目,項(xiàng)目名稱eHRMSetUp。
項(xiàng)目添加完畢,選中eHRMSetUp,會(huì)發(fā)現(xiàn)工具欄發(fā)生了一些變化,如圖所示:
主要有6個(gè)工具按鈕,分別代碼安裝部署的6大編輯器:
1、表示文件系統(tǒng)編輯器,主要用于目標(biāo)機(jī)器的文件安裝操作。
2、表示注冊表編輯器,用于目標(biāo)機(jī)器的注冊表操作。
3、表示文件類型編輯器,用于向目標(biāo)機(jī)器安裝新的文件類型。
4、用戶界面編輯器,用于確定安裝過程中所用到的一些界面。
5、自定義操作編輯器,調(diào)用用戶自定義的操作代碼。
6、啟動(dòng)條件編輯器,用于設(shè)置安裝程序的啟動(dòng)條件。
這6個(gè)編輯器不一定全部會(huì)用到,我們的demo安裝就只需要用到1/4/5大部分的安裝包屬性均存在于eHRMSetUp項(xiàng)目的屬性中,屬性界面如圖:
在這里可以設(shè)置產(chǎn)品名稱(eHRMSetUp),產(chǎn)品編號(ProductCode)以及安裝包全球化類型(Localization)等相關(guān)的安裝程序?qū)傩浴3薳HRMSetUp安裝部署項(xiàng)目,我們還需要添加一個(gè)eHRMSetUpCompenent項(xiàng)目,用來自定義安裝操作,在eHRMSetUpCompenent項(xiàng)目中添加一個(gè)新的安裝程序類,如圖:
名稱為eHRMInstaller.cs,在其中添加如下代碼:
protected override void OnAfterInstall(IDictionary savedState) {
????base.OnAfterInstall (savedState);
}
public override void Install(IDictionary stateSaver) {
????base.Install (stateSaver);
}
protected override void OnBeforeInstall(IDictionary savedState) {
????base.OnBeforeInstall (savedState);
}
public override void Uninstall(IDictionary savedState) {
????base.Uninstall (savedState);
}
public override void Rollback(IDictionary savedState) {
???? base.Rollback (savedState);
}
這些代碼將主要負(fù)責(zé)對于安裝中的操作進(jìn)行自定義處理,包括建數(shù)據(jù)庫,配置web.config等。為了在安裝部署中調(diào)用項(xiàng)目eHRMSetUpCompenent定義的操作,需要在項(xiàng)目eHRMSetUp中添加eHRMSetUpCompenent的主輸出和項(xiàng)目eHRM的內(nèi)容輸出,具體操作是選擇eHRMSetUp項(xiàng)目后右鍵 —— 添加 —— 項(xiàng)目輸出 ——選擇項(xiàng)目eHRMSetUpCompenent的主輸出,添加完畢后如圖:
現(xiàn)在回到項(xiàng)目eHRMSetUp,打開文件系統(tǒng)編輯器,點(diǎn)擊Web應(yīng)用程序文件夾,編輯其屬性,屬性界面如下:
其中比較重要的就是VirtualDirectory屬性,表示安裝后建立的虛擬目錄名稱,其他屬性視具體情況而定。下面通過用戶界面編輯器來配置用戶的安裝界面,vs.net2003目前所提供的窗口比較少,如圖:
基本是幾個(gè)比較簡單的配置窗口,所以如果需要用到一些復(fù)雜的配置,那么這些窗口就遠(yuǎn)遠(yuǎn)不夠用了,不過我們可以進(jìn)行部分的擴(kuò)展來實(shí)現(xiàn)這些復(fù)雜的配置,具體方法如下:
1、在項(xiàng)目eHRMSetUpCompenent中添加一個(gè)windows窗口FrmConfig.cs,設(shè)計(jì)我們需要用的界面。
2、修改eHRMInstaller.cs中的代碼如下:
???? FrmConfig _FC = new FrmConfig();
???? _ FC.ShowDialog();
???? base.OnAfterInstall (savedState);
} 3、這樣,在安裝的過程中會(huì)中斷并彈出FrmConfig讓用戶進(jìn)行配置。最后就是通過自定義操作編輯器來設(shè)置安裝過程中的自定義操作,從web應(yīng)用程序文件夾選擇主輸出來自eHRMSetUpCompenent(活動(dòng)),添加完畢如圖所示:
VitualDir=[TARGETVDIR][TARGETDIR]和[TARGETVDIR]是系統(tǒng)部署自帶屬性,分別表示安裝物理目錄地址和虛擬目錄地址。設(shè)置完這些自定義操作的傳入?yún)?shù)后就可以直接在eHRMSetUpCompenent項(xiàng)目的代碼中進(jìn)行調(diào)用,調(diào)用代碼如下:
public override void Install(IDictionary stateSaver)
{
????//安裝物理目錄
????string LogicDir = Context.Parameters["LogicDir"];
????//安裝虛擬目錄
????string VitualDir = Context.Parameters["VitualDir"];
????//根據(jù)配置安裝操作
????base.Install (stateSaver);
}
最后需要做的就是卸載時(shí)的一些文件處理:
public override void Uninstall(IDictionary savedState) {
???? //安裝物理目錄
???? string LogicDir = Context.Parameters["LogicDir"];
???? //安裝虛擬目錄
???? string VitualDir = Context.Parameters["VitualDir"];
???? //處理自定義部分的安裝內(nèi)容,如數(shù)據(jù)庫等
???? base.Uninstall (savedState);
}
完成了這一系列動(dòng)作后,整個(gè)程序的安裝雛形已經(jīng)基本OK,只要在相應(yīng)的地方加入實(shí)際安裝中所需要進(jìn)行的一系列Action就可以制作一個(gè)完整的安裝部署程序。
注意事項(xiàng):
1、Resource文件屬于項(xiàng)目的源文件,而非內(nèi)容文件,所以如果項(xiàng)目中有Resource文件存在,則需要添加項(xiàng)目的源文件輸出,同時(shí)利用排除篩選器設(shè)置好對*.cs文件和*.resx文件的過濾。
2、Bin目錄默認(rèn)不在web項(xiàng)目中,所以打包還需要加入web項(xiàng)目的主輸出或直接把bin目錄下的文件加入到web項(xiàng)目中,這樣生成的dll會(huì)包含在內(nèi)容文件輸出中。
3、安裝制作過程中某些目錄可能會(huì)無法創(chuàng)建(偶沒能找到具體原因,估計(jì)是因?yàn)槲募蕾囆缘木壒?#xff09;,則可以手工在Web應(yīng)用程序文件夾中直接創(chuàng)建。
轉(zhuǎn)載于:https://www.cnblogs.com/slcfhr/archive/2006/07/18/453824.html
總結(jié)
以上是生活随笔為你收集整理的VS.NET安装部署深入研究的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最后一天,最后一刻。。。。。。情理之中,
- 下一篇: 爆笑一文