前幾天千辛萬苦把一個WinForm專案從1.1拉拔到2.0,含淚播種的,必歡呼收割,今天我就已經開始享受2.0所帶來的另一項便利功能---ClickOnce!

早在VS 2005上市時就知有這項功能,但因為過去都以Web Application開發為主,也沒時間嘗試。今天實地測試了一下,哇靠! 真是簡單到爆、方便到不行,真他X的一整個好用! (對不起,失態了,實在是太興奮了)

原本以為要用ClickOnce得另外加一個Setup Project再設定一些東西才會Work,沒想到比想像中的還簡單,只需在專案上按右鍵,選Publish(公佈),輸入IIS URL,決定是否可以離線使用即可。


接著VS 2005會建立一個安裝程式用的Web Page, 使用者只需按下網頁上的連結就會完成程式的安裝:

當然,ClickOnce的精髓在於日後有新版本時,程式能自動更新,所以當你執行程式時,會先出現一個檢查更新版本的進度畫面。(你也可以設定等程式跑起來才檢查更新,這樣還可以指定多久檢查一次更新,不必每次Check)

如果有新版,會提示使用者是否要安裝新版本?

不過呢,身為歷盡滄桑的中年人,深知看過小程式的漂亮Demo後只能高興十分鐘,接下來要仔細考量它在實務應用上的可行性。(就像你永遠不會知道購物頻道裡那把可以削椰子殼、直接刨冰塊的霹靂無敵菜刀,是不是用不到一個月就鈍到連切豆干都會牽絲?)

我用手上的專案做了測試,包含Reference 3rd Party Control、額外附加檔案、EXE中使用TCP/IP... 測試OK,看起來ClickOnce的第一步是成功的。我打算使用它做為對內Beta測試時的版本更新用途,將來待更了解後看看可否有進一步的應用,Anyway,ClickOnce Rocks!!


Comments

# by maggie

請問大大..在使用ClickOnce安裝及更新下載後的程式能不能指定在某個目錄下?? 謝謝

# by Jeffrey

據我所知是不行,程式會自動被安裝在C:\Documents and Settings\username\Local Settings\Apps\2.0\9QY6D886.43G\WB0XJMJD.AGC這類目錄下(後兩層目錄名稱是隨機產生的),沒得選擇。

# by 迷途羔羊

請問大大..我在按下安裝時網頁會出現 "CGI Error The specified CGI application misbehaved by not returning a complete set of HTTP headers. The headers it did return are:" 這樣的訊息,想請問一下是哪邊有問題? 謝謝!

# by Jeffrey

to 迷途羔羊, 我應該是你的IIS或WebServer被設定允許執行"執行檔"(一般都設指令檔而已),所以當連結到安裝EXE檔案時,IIS試圖在Server端直接執行該EXE檔而沒把它送到Client端,建議你檢查一下IIS上的設定。

# by 離人

請問大大,我現在把一個windows form的專案要用ClickOnce的方式部署到client端,在client端需要安裝sql express,而且在db中會有一些基本的維護資料,我現在想請教的問題是我可以把sql express的安裝檔和資料打包成一包用clickonce的方式下載到client端後安裝sql express和匯入資料庫?或是有其他的方式可以處理?可以指導一下嗎?

# by Jeffrey

to 離人,據我所知,ClickOnce沒法包入這些Custom Action。如果是我,我會在程式中加入一段邏輯,發現資料庫未安裝或第一次執行時,進行"初始化"將資料庫建起來。

# by 迷途羔羊

請教大大一個問題,現在有一個專案(class library)裡面會用到一些我自己加的**.config檔案,然後開一個window form的專案,將dll的那個專案加入參考,現在如果用clickonce部署到server上,但是在dll中會使用的**.config並不會一起deploy上去現在想請教的是,我可以在要部署window form專案時,可以指定我要附加額外檔案嗎?或是要如何把dll那個專案中的**.config檔案可以一起deploy上去? 謝謝!

# by Jeffrey

to 迷途羔羊, 在WinForm專案中加入你的config檔,檔案的Build Action設為"Content",則編譯時它應該會被複製到bin/debug目錄下。這類的檔案,預設會被包含ClickOnce的部署清單中。

# by 迷途羔羊

先謝謝大大的回答,大大說的確實是可以的,但是我現在如果不想把所有的config的檔案都放在winform的專案下,我想要如果是class library中會用到的config檔,就放在class library的專案下,那麼winform的專案要如何把class library專案中的config檔案包到clickonce的部署清單中?

# by Jeffrey

to 迷途羔羊, 可以試試以下方法額外指定要包入的資料檔: http://msdn.microsoft.com/zh-tw/library/6fehc36e.aspx。不過這意味著每次用VS2008 Publish完都要再做些事後加工,會比將config納入WinForm專案中麻煩些。

# by barry

離人 你所说的是可以包含到 ClickOnce 中去的。 你可以在VS2005的安装目录 SDK\v2.0\BootStrapper\Packages\ 中配置好 product.xml 和 package.xml 是可以包含的。

# by alt

您好,我是用vs2010開發, 我在發佈時為何沒有publish.htm安裝頁面, 請問我要如何有這一頁,謝謝。

# by Jeffrey

to alt, Publish時其他檔案都正常只缺了Publish.htm,還是不確定是否正常,因找不到安裝頁面所以無從測起?

Post a comment