象 ASP、ASP.NET 等諸多基於 Web 的應用程序的安裝與部署一直是個麻煩事情,一般都是手工復制、手工修改相關配置文件(主要是數據庫配置),和 Windows 上 Installer 或 Linux 上的 RPM 相比,這種方式顯然一點技術含量都沒有。
對於胖客戶端應用,從很早開始就一直都有較為完善的安裝程序制作工具了,如 InstallShield、InstallAnywhere、Wise Installer、SWIFT Installer 等等,其中一部分已經實現了跨平台,可以運行在 Windows、Linxu、Java 等平台上。
從 Visual Studio 6.0 開始,Microsoft 提供了單獨的 Setup Tools ,可以用來制作簡易的安裝程序,後來,這個工具被集成到 VS.NET 2002/2003 中,並且功能做了一些增強,可以制作自定義的對話框等。其優點是能很好的和 VS.NET 的項目進行集成,這樣在整個解決方案(Solution)在 Build 的時候,就可以生成安裝包,這樣便於實現每日構建(Daily Build),同時其缺點仍然存在,不能對安裝過程進行更多地控制,提供的對話框功能和類型有限,很少看到有人利用這些對話框實現對系統的一些較為復雜的配置,如絕大多數應用程序中都會涉及的數據庫創建、初始數據的生成等工作。
有很多不錯的安裝工具中,在安裝的過程中就可以對實現對系統進行一些配置,但安裝結束後,如果配置發生改變,例如數據庫遷移等,又變成一件令人頭疼的事情,如果對系統了解較多,知道配置數據的存放位置,就可以手動修改,如果不了解怎麼辦?難道要先卸載,再重新安裝來完成新配置?
在很多不錯的胖客戶應用中,配置界面是和安裝界面獨立的,這樣便於在安裝系統後,靈活地調整其配置,那麼就把它拿到 ASP.NET 的安裝程序中吧。
1) 建立解決方案 Solution
2) 建立 Web 應用
3) 新增一個 WinForms 應用 AppConfig,增加一個 WinForm ,完成初始化系統環境,修改系統配置的功能(如生成數據庫、生成初始數據、修改 Web.Config 中的數據庫連接參數,Machine.Config 或自定義配置文件)等功能,生成 AppConfig.exe
4) 新增一安裝項目 Setup,除了將 Web 應用的的“主輸出”和“內容輸出”加入到項目中,還要將 AppConfig 的“主輸出”加入到此項目中
5) 在 Setup 項目中的“自定義操作中”的“安裝”節,增加一自定義操作,使其運行來自於 AppConfig 的“主輸出” AppConfig.exe
這樣 ASP.NET 的安裝程序在運行的最後階段,會運行 AppConfig 的 WinForm 程序,來完成相關的配置,如數據庫等。如果以後配置發生改變,可以直接運行 AppConfig.exe 來更改配置。
值得一提的是,由於 AppConfig 是 WinForms 應用,相對於 Installer 的對話框而言,有很大的發揮余地,例如我經常在項目中加入 SQL Server 管理對象 Interop.SQLDMO.dll 的引用,這樣可以在輸入/選擇 SQL Server 的列表框中實現自動列出可用的 SQL Server 名稱列表,看起來很專業的樣子