程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 深入研究VS.NET安裝部署

深入研究VS.NET安裝部署

編輯:關於.NET

相信很多人都做過安裝程序,目前最大功能最全的當屬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"];
//TODO 根據配置安裝操作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應用程序文件夾中直接創建。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved