相信很多人都做過安裝程式,目前最大功能最全的當屬InstallShield,但是InstallShield的文法學習起來實在費勁,相對而言
vs.net內建的安裝部署短小精悍,且使用C#文法,對於一般C#開發人員來說使用起來就極為簡便,在對其作了一些研究之後,發現vs.net的安裝部署
項目的功能也已經非常好用,一般的程式安裝都可以輕鬆實現,當然,在研究的過程中也發現了一些缺陷,這個後面再提。下面就向大家介紹一下ASP.NET安
裝部署項目的一些複雜應用實現: 首先我們假設存在一個已經完工的web項目eHRM,其檔案清單
其中web.config中存在我們的資料庫連接及系統的一些其他配置,如資料庫類型等,這些配置需要在安裝時進行修改。
OK,知道了我們的安裝對象,現在開始做安裝部署程式,首先,在解決方案中添加一個新項目,,項目類型為Web安裝項目,項目名稱eHRMSetUp。
項目添加完畢,選中eHRMSetUp,會發現工具列發生了一些變化,:
主要有6個工具按鈕,分別代碼安裝部署的6大編輯器:
1、
表示檔案系統編輯器,主要用於目標機器的檔案安裝操作。
2、
表示登錄編輯程式,用於目標機器的註冊表操作。
3、
表示檔案類型編輯器,用於向目標機器安裝新的檔案類型。
4、
使用者介面編輯器,用於確定安裝過程中所用到的一些介面。
5、
自訂動作編輯器,調用使用者自訂的作業碼。
6、
啟動條件編輯器,用於設定安裝程式的啟動條件。
這6個編輯器不一定全部會用到,我們的demo安裝就只需要用到1/4/5大部分的安裝包屬性均存在於eHRMSetUp項目的屬性中,屬性介面
在在這裡可以設定產品名稱(eHRMSetUp),產品編號(ProductCode)以及安裝包全球化類型(Localization)等相關的安裝程
序屬性。除了eHRMSetUp安裝部署項目,我們還需要添加一個eHRMSetUpCompenent項目,用來自訂安裝操作,在
eHRMSetUpCompenent項目中添加一個新的安裝程式類,
名稱為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);
}
這些代碼將主要負責對於安裝中的操作進行自訂處理,包括建資料庫,配置web.config等。為了在安裝部署中調用項目
eHRMSetUpCompenent定義的操作,需要在項目eHRMSetUp中添加eHRMSetUpCompenent的主輸出和項目eHRM的內
容輸出,具體操作是選擇eHRMSetUp項目後右鍵 —— 添加 —— 項目輸出
——選擇項目eHRMSetUpCompenent的主輸出,添加完畢後
現在回到項目eHRMSetUp,開啟檔案系統編輯器,點擊Web應用程式檔案夾,編輯其屬性,屬性介面如下:
其中比較重要的就是VirtualDirectory屬性,表示安裝後建立的虛擬目錄名稱,其他屬性視具體情況而定。下面通過使用者介面編輯器來配置使用者的安裝介面,vs.net2003目前所提供的視窗比較少,
基本是幾個比較簡單的配置視窗,所以如果需要用到一些複雜的配置,那麼這些視窗就遠遠不夠用了,不過我們可以進行部分的擴充來實現這些複雜的配置,具體方法如下:
1、在項目eHRMSetUpCompenent中添加一個windows視窗FrmConfig.cs,設計我們需要用的介面。
2、修改eHRMInstaller.cs中的代碼如下:
protected override void OnAfterInstall(IDictionary savedState) {
FrmConfig _FC = new FrmConfig();
_ FC.ShowDialog();
base.OnAfterInstall (savedState);
}
3、這樣,在安裝的過程中會中斷並彈出FrmConfig讓使用者進行配置。最後就是通過自訂動作編輯器來設定安裝過程中的自訂動作,從web應用程式檔案夾選擇主輸出來自eHRMSetUpCompenent(活動),添加完畢:
分
別設定4個主輸出的CustomActionData屬性為: /LogicDir=[TARGETDIR]
/VitualDir=[TARGETVDIR][TARGETDIR]和[TARGETVDIR]是系統部署內建屬性,分別表示安裝物理目錄位址和虛擬
目錄位址。設定完這些自訂動作的傳入參數後就可以直接在eHRMSetUpCompenent項目的代碼中進行調用,調用代碼如下:
public override void Install(IDictionary stateSaver)
{
//安裝物理目錄
string LogicDir = Context.Parameters["LogicDir"];
//安裝虛擬目錄
string VitualDir = Context.Parameters["VitualDir"];
//根據配置安裝操作
base.Install (stateSaver);
}
最後需要做的就是卸載時的一些檔案處理:
public override void Uninstall(IDictionary savedState) {
//安裝物理目錄
string LogicDir = Context.Parameters["LogicDir"];
//安裝虛擬目錄
string VitualDir = Context.Parameters["VitualDir"];
//處理自訂部分的安裝內容,如資料庫等
base.Uninstall (savedState);
}
完成了這一系列動作後,整個程式的安裝雛形已經基本OK,只要在相應的地方加入實際安裝中所需要進行的一系列Action就可以製作一個完整的安裝部署程式。
注意事項:
1、Resource檔案屬於項目的源檔案,而非內容檔案,所以如果項目中有Resource檔案存在,則需要添加項目的源檔案輸出,同時利用排除篩選器設定好對*.cs檔案和*.resx檔案的過濾。
2、Bin目錄預設不在web項目中,所以打包還需要加入web項目的主輸出或直接把bin目錄下的檔案加入到web項目中,這樣產生的dll會包含在內容檔案輸出中。
3、安裝製作過程中某些目錄可能會無法建立(偶沒能找到具體原因,估計是因為檔案依賴性的緣故),則可以手工在Web應用程式檔案夾中直接建立。