Winform程序发布与自动升级(clickonce)

背景

        Winform程序放到本地,如果版本更新多了,会导致不同电脑的版本不同,而且混乱。管理起来麻烦。因此需要自动更新来统一管理程序的版本。网络上自动更新程序有好多方法,这里就使用微软提供的clickonce方法实现自动更新。

系统发布

        1、右键程序,选择发布

        

         2、选择要发布的位置,点击下一步(位置指定电脑一个文件夹,如下图E:\IIS PROJECT\WEB\FileDownLoad)

        

        3、选择从网站-》点击浏览-》填写相应的url地址-》填写完点下一步

        注意:url地址就是iis上面部署的系统自动更新的地址,不能乱填(系统检测更新与下载更新都是从这个地址上面拉取下来更新的)

        

        iis网站部署

        

        4、选择"是",然后点击下一步

        

        5、点击完成即可

        

发布完成

        1、发布完成

        

        2、然后本地文件(前面配置的地址:E:\IIS PROJECT\WEB\FileDownLoad)也会生成相应的文件

        

        3、而且浏览器会自动跳转到页面 http://172.60.65.82:8070/publish.htm

        

        4、然后把本地路径生成的文件复制一份到iis发布的网站路径(E:\IIS PROJECT\WEB\FileDownLoad)上面即可

        

发布可能遇到的异常

        1、发布的时候显示签名错误

        

        解决方式就是把签名关了就行

        右键项目-》属性-》签名-》把"为clickOnce清单签名"的√去掉即可。

        

安装

        1、用浏览器打开上面的下载地址(http://172.60.65.82:8070/publish.htm)点击安装,就会自动下载文件 setup.exe文件

        2、下载完之后点击安装即可。

        3、安装完成,直接点击就能使用了

        

自动更新

        1、程序修改之后,重新发布。然后客户端打开的时候,会自动校验程序是否已更新,若已更新,则会提示程序已更新

        注意:这里建议点击"确定",因为点击"跳过"之后,下次打开之后就不会自动检测更新了,直到下一次版本更新(下面文章有使用代码强制更新的方式)

        

        2、如果想要每一次打开都不显示更新的页面,如下页面,可以设置更新时间

        把更新时间设置为52周,基本就相当于不更新了,这样就不会每一次打开都显示上面的页面了(不建议这么做,正常情况下每次运行时检查是最好的)

        

强制更新

        1、如上更新内容所示,如果用户点击跳过之后当前版本就不会再检测更新了,所以可以使用代码来实现提示更新或者强制更新(看自己的需求)

        代码如下:

using System;
using System.Deployment.Application;
using System.Threading;
using System.Windows.Forms;

namespace DoExcel
{
    public partial class Form4 : Form
    {
        public Form4()
        {
            InitializeComponent();
            lb_tip.Text = "";
            timer1.Start();
        }
        
        /// <summary>
        /// 启动
        /// </summary>
        private void timer1_Tick(object sender, EventArgs e)
        {
            Thread td = new Thread(checkVersion);
            td.Start();
        }

        /// <summary>
        /// 执行更新操作
        /// </summary>
        private void checkVersion()
        {
            try
            {
                if (ApplicationDeployment.IsNetworkDeployed)
                {
                    ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment;
                    UpdateCheckInfo info = ad.CheckForDetailedUpdate();
                    if (info.UpdateAvailable)
                    {
                        if (!info.IsUpdateRequired)
                        {
                            lb_tip.Text = "有新版本,点击更新" + DateTime.Now.ToString();
                            lb_tip.Enabled = true;
                        }
                    }
                    else
                    {
                        lb_tip.Text = "";
                    }
                }
            }
            catch (Exception e)
            {
                lb_tip.Text = e.Message;
                lb_tip.Enabled = false;
            }
        }

        /// <summary>
        /// 更新
        /// </summary>
        private void lb_tip_Click(object sender, EventArgs e)
        {
            if (ApplicationDeployment.IsNetworkDeployed == true)
            {
                ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment;
                if (ad.CheckForUpdate() == true)
                {
                    if (MessageBox.Show("检测到有新的版本可以进行更新,现在需要更新吗?", "选择是否要进行更新", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
                    {
                        ad.Update();
                        Application.Restart();
                    }
                }
            }
        }

        public delegate void SetTextCallback(string text,Label label);
        public void setLabel(string text,Label label) {
            if (label.InvokeRequired)
            {
                SetTextCallback s = new SetTextCallback(setLabel);
                Invoke(s, new object[] { text, label });
            }
            else
            {
                label1.Text = text;
            }
        }

    }
}

        结果

        

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值