.net程序開發、測試完成後,還有一個很重要的步驟--部署,作爲用戶,自然是希望越傻瓜化、越人性化越好。.net自帶的部署選項有以下幾種:
1、 Xcopy 實用工具
2、Copy Web工具
3、發佈 Web站點
4、部署項目(又分爲四類:創建合併模塊;爲客戶應用程序創建安裝程序;爲 Web 應用程序創建安裝程序; 以及爲基於智能設備(Compact Framework)的應用程序創建安裝程序。還可以創建 cab文件。)
5、 ClickOnce
前四種方式應用很廣泛,本文主要介紹ClickOnce的一次使用過程。
ClickOnce 是一種允許應用程序自動升級的部署技術。應用程序發佈到文件共享、Web站點或 CD 這樣的媒介上。之後, ClickOnce 應用程序就可以自動升級,而無需用戶的干涉。ClickOnce 還解決了安全權限問題。一般情況下,要安裝應用程序,用戶需要有管理權限。而利用 ClickOnce,用戶只要有運行應用程序所需的最低權限,就可以安裝和運行。
首先,我們瞭解一下ClickOnce與普通的windows inStaller程序有何區別:
ClickOnce | Windows Installer | |
應用程序的安裝位置 | ClickOnce 應用程序緩存 | Program Files 文件夾 |
給多個用戶安裝 | 否 | 是 |
安裝共享文件 | 否 | 是 |
安裝驅動程序 | 否 | 是 |
安裝到 GAC 中 | 否 | 是 |
在“啓動”組中添加應用程序 | 否 | 是 |
在菜單中添加應用程序 | 否 | 是 |
註冊文件類型 | 否 | 是 |
訪問註冊表 | 否。有訪問 HKLM 的 Full Trust 權限 | 是 |
文件的二進制修補 | 是 | 否 |
根據需要安裝程序集 | 是 | 否 |
在一些情況下,使用 Windows Installer 比較好,但 ClickOnce 也適用於許多應用程序。 ClickOnce 應用程序會顯示在“添加/刪除程序”控制面板選項上,這與其他安裝的應用程序一樣。一個主要區別是用戶可以選擇卸載應用程序或回退到以前的版本。ClickOnce在 ClickOnce 應用程序緩存中保存以前的版本。
關於Winows Installer的使用,本文略過。下面介紹我的一次ClickOnce的部署過程:
1、創建主程序,並測試成功!
2、創建web程序,併發布主程序到web目錄。
web程序的設置,注意部署到IIS中。
主程序的發佈選項:
是否創建一個桌面圖標:
此時客戶可以從這個地址在線安裝程序了。web程序目錄下生成三個文件:
3、從指定web路徑安裝程序
4、升級安裝程序、回滾安裝程序
首先修改主程序,併發而新版本,如下:
發佈後用戶再次運行主程序,或訪問publish.htm時,會收到如下提示:
升級成功後,界面:
此時,控制面板,如下:
此時,選擇“更改/刪除”可以選擇前一個版本或徹底刪除,如果選擇前一個版本,如下:
5、問題出現:
在項目-右鍵-屬性-發佈--發佈嚮導時,提示錯誤: Cannot publish because a project failed to build.
奇怪!嘗試解決方法如下:
一、單獨生成項目、重新生成項目、清理項目,刪除所有obj及bin目錄,均試過,可以生成項目,但發佈時出錯,如上提示。
二、懷疑是IIS權限問題,給web項目文件夾network service賬號所有權限。
三、IE-選項-內容中,清除證書。
四、主動修改了一個新版本,仍然出錯。
google成了我的救命稻草,終於找到一條類似的信息,說是用右鍵直接發佈即可。終於成功!如下圖:
不正確的方法:
正確的方法:
六、問題分析:
發佈選項,其實是調用了vs2010自帶的dos命令mage.exe或它的UI程序:mageUI.exe,它主要用來修改相應的application選項。
關於MageUI的說明,請參閱MSDN:http://msdn.microsoft.com/zh-cn/library/xhctdw55%28VS.80%29.aspx
我們可以在程序-Microsoft Visual Studio 2010-Visual Studio Tools-Visual Studio Command Prompt (2010)出現的命令狀態中輸入mageui.exe,得到如下界面:
其實上面出錯的界面,和成功的兩個界面,應該都是調用Mage.exe或mageUi.exe,只不過可能是調用時參數不一致而導致出錯,這應該是Vs2010 RTM的一個bug。(附:ClickOnce 應用程序有兩個基於XML 的清單文件,其中一個是應用程序的清單,另一個是部署清單。這兩個文件描述了部署應用程序所需的所有信息。應用程序清單包含的應用程序信息有需要的權限、要包括的程序集和其他從屬文件。部署清單包含了應用程序的部署信息。應用程序清單的位置信息包含在部署清單中。)
需要注意:
1、應用程序緩存:用 ClickOnce 發佈的應用程序不能安裝在 Program Files 文件夾中,它們會放在應用程序緩存中,應用程序緩存位於當前用戶的 Document’s and Settings文件夾的 Local Settings子文件夾下。控制部署的這個功能,可以把應用程序的多個版本同時放在客戶機上。如果應用程序設置爲在線運行,就會保留用戶訪問過的每個版本。對於設置爲本地運行的應用程序,會保留當前版本和以前的版本。 所以,把 ClickOnce 應用程序回退到以前的版本是一個非常簡單的過程。如果用戶進入“添加/刪除程序”控制面板選項,所顯示的對話框將允許刪除 ClickOnce 應用程序或回退到以前的版本。管理員可以修改清單文件,使之指向以前的版本。之後,下次用戶啓動應用程序時,會檢查是否更新版本。應用程序不是查找要部署的新程序集,而是恢復以前的版本,但不需要用戶的干涉。這也是ClickOnce部署的一個優勢。
2、ClickOnce可定製的內容還是簡單了點,如果需要更爲精緻的用戶對話界面,還是需要自定義Windows Installer來實現,或通過第三方的InstallShield等專業工具。但它提供了一種界面友好的自我管理機制,幾乎實現了真正的無接觸部署(No Touch Deployment)。