2016年5月6日 星期五

ClickOnce 教學(第一次使用,順便記錄下來)

當你把一個專案寫好之後,要透過 ClickOnce 發行,步驟很簡單。

程序:
對著專案按右鍵→
發行→
指定要發行此應用程式的位置(就是把發行檔案放到一個目錄底下,之後再把這個檔案搬到IIS 網站底下)
使用者要如何安裝應用程式(我希望是從網頁上安裝,所以選第一個從網站)
是否可以在離線時使用應用程式(選是,畢竟能不能連線,看個人需求)


1.對著專案按右鍵→發行




2.指定要發行此應用程式的位置(就是把發行檔案放到一個目錄底下,之後再把這個檔案搬到IIS 網站底下)


 3.使用者要如何安裝應用程式(我希望是從網頁上安裝,所以選第一個從網站)


4.是否可以在離線時使用應用程式(選是,看個人需求)






需求1ClickOnce 建立桌面捷徑

流程:對著專案按右鍵→屬性→發行→選項→資訊清單→建立桌面捷徑  打勾

1.對著專案按右鍵→屬性


2.左邊選發行頁,在按下選項的按鈕


3.左邊選資訊清單頁,把建立桌面捷徑 打勾即可



需求2:程式啟動時ClickOnce 強迫更新,不能允許使用舊程式
流程:對著專案按右鍵→屬性→發行→更新→指定此應用程式的最小必要版本 打勾
1.點選更新
2.指定此應用程式的最小必要版本 打勾,並確認發行版本是否一致

需求3:程式執行時,版本有更新,要強迫使用者更新並自動重啟

要寫程式碼
 private void 檢查ClickOnce版本是否最新()
        {
            try
            { 
                //先確認是不是 ClickOnce的程式,避免程式出錯
                if (!(ApplicationDeployment.IsNetworkDeployed))
                {
                    return;
                } 
                //程式執行過程中,有版本更新 ,自動更新。
                System.Deployment.Application.ApplicationDeployment obj = ApplicationDeployment.CurrentDeployment;//取得目前使用者的版本資訊
                if (ApplicationDeployment.CurrentDeployment.CheckForUpdate())//比對伺服器上的版本
                {
                    obj.UpdateCompleted += new AsyncCompletedEventHandler(obj_UpdateCompleted);
                    obj.UpdateAsync();
                }
                else
                {
                    MessageBox.Show("版本沒有新的");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void obj_UpdateCompleted(object sender, AsyncCompletedEventArgs e)
        {
            Application.Restart();
        }




隔幾天:額外新需求
需求4:透過網址的Get參數將Value 傳進程式裡面。
流程:對著專案按右鍵→屬性→發行→選項→資訊清單→ 將允許傳遞 URL 參數至應用程式 打勾



    //呼叫網址:http://網址/TestClickOnce/TestClickOnce.application?A=1&B=2&C=3
        private NameValueCollection 取得ClickOnce的Get參數()
        {
            string QueryString = ApplicationDeployment.CurrentDeployment.ActivationUri.Query;
            NameValueCollection Get參數集合 = new NameValueCollection();
            Get參數集合 = System.Web.HttpUtility.ParseQueryString(QueryString);

            List<Get參數> ListGet參數 = new List<Get參數>();

            foreach (String s in Get參數集合.AllKeys)
            {
                Get參數 item = new Get參數();
                item.QueryStringKey = s;
                item.QueryStringValue = Get參數集合[s];
                ListGet參數.Add(item);
            }

            return Get參數集合;
        }

        public class Get參數
        {
            public string QueryStringKey { get; set; }
            public string QueryStringValue { get; set; }
        }

沒有留言:

張貼留言