看过网上“圣殿骑士”和其他人的升级做法,感觉不太适合几十M的小型软件。

之前用的一直都是clickonce,但是3年下来感觉弊端太多,比如安装不能选择文件夹、打包不全、版本等问题,于是决定另辟捷径。

主要实现2个目的:

1、Winform打开会有提示,自动跳转下载网页。

2、网页下载。

工作步骤:

1、App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="Version" value="1.0.0.2"/>
<add key="http" value="http://192.168.1.48/autoupdater/version.html"/>
<add key="download" value="http://192.168.1.48/autoupdater/index.html"/>
</appSettings>
</configuration>

2、Login 界面

string version = ConfigurationManager.AppSettings["Version"].ToString();//获取当前版本
string http = ConfigurationManager.AppSettings["http"].ToString();//version版本地址
string download = ConfigurationManager.AppSettings["download"].ToString();//下载网址

WebClient MyWebClient = new WebClient();

private string get_new_version()
{
MyWebClient.Credentials = CredentialCache.DefaultCredentials;//获取或设置用于向Internet资源的请求进行身份验证的网络凭据
Byte[] pageData = MyWebClient.DownloadData(http); //从指定网站下载数据
string pageHtml = Encoding.UTF8.GetString(pageData);
return pageHtml;
}

Load事件:

  try
            {
                if (version.Trim() != get_new_version().Trim())
                {
                    MessageBox.Show("本机版本: " + version + ",有新版本:" + get_new_version(),"升级提示");

                    System.Diagnostics.Process.Start(download);
                    System.Environment.Exit();
                }
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

3、http 新版本网页,没看错,就一句

1.0.0.3

4、下载网页 index.html

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>软件下载</title>
<style type="text/css">
body
{
     margin:30px;
     width:800px;
     height:500px;
     padding:20px;
    }

a:link {color: #FFCC66}     /* 未访问的链接 */
a:visited {color: #FFCC66}    /* 已访问的链接 */
a:hover {color: #FFCC66}    /* 鼠标移动到链接上 */
a:active {color: #FFCC66}    /* 选定的链接 */
</style>
</head>
<body>
<div  style="font-size:20px;">

<table   align="center" cellpadding="5" cellspacing="0"  style=" border:1px solid red;   border-collapse: collapse;"  >
<caption><h3>软件说明</h3><div align="right">日期: 2016-11-01</div> </caption>
<tr>
<th>名称</th>
<th>版本</th>
<th>下载</th>
<th>备注</th>
</tr>
<tr>
<td> .net 框架</td>
<td>4.0.30319.1</td>
<td><a href="dotnetfx/dotNetFx40_Client_x86_x64.exe" ><button value="下载"  type="button">下载</button></a></td>
<td>仅限初次安装,必装。</td>
</tr>
<tr>
<td>.net 框架中文语言包</td>
<td></td>
<td><a href="dotnetfx/dotNetFx40LP_Client_x86_x64zh-Hans.exe" ><button value="下载"  type="button">下载</button></a></td>
<td>选装</td>
</tr>
<tr>
<td colspan="4"></td>
</tr>
<tr>
<td><strong>系统</strong></td>
<td> </td>
<td><a href="XXX.exe" ><button value="下载"  type="button">下载</button></a></td>
<td>必装</td>
</tr>
</table>
</div>
</body>
</html>

最后,国际惯例,上图:

点击确定后,

说明:

  适用于几十M的小软件。

简单的自动升级提示AutoUpdater的更多相关文章

  1. JavaScript设置简单的自动时间

    下面就是一段简单的JavaScript设置简单的自动时间,时间显示在一个输入框input里面. <html> <head> </head> <body> ...

  2. mysql安装简单教程(自动安装/配置安装)

    mysql安装简单教程(自动安装/配置安装) 1.1前言: 由于特殊原因,在最近2-3个月里mysql真是安装了无数遍,每次安装都要上网找教程,每个教程基本都不一样,因此还是自己写下来比较好,毕竟自己 ...

  3. Spring Boot 揭秘与实战 自己实现一个简单的自动配置模块

    文章目录 1. 实战的开端 – Maven搭建 2. 参数的配置 - 属性参数类 3. 真的很简单 - 简单的服务类 4. 自动配置的核心 - 自动配置类 5. spring.factories 不要 ...

  4. Windows 下 MySQL 简单定时自动备份、删除过期备份

    Windows 下 MySQL 简单定时自动备份.删除过期备份 MySQL Workbench 客户端虽然好用,但并不提供自动备份功能.手工备份,确实繁琐. 新建一个 数据库备份文件存放目录,本例为D ...

  5. Winform开发常用控件之DataGridView的简单数据绑定——自动绑定

    DataGridView控件可谓是Winform开发的重点控件,对于数据的呈现和操作非常方便,DataGridView可谓是既简单又复杂.简单在于其已经集成了很多方法,复杂在于可以使用其实现复杂的数据 ...

  6. 【SSH】——Hibernate实现简单的自动建表

    [与ORM] Object Relational Mapping,对象关系映射,将对象和关系联系了起来.面向对象是从耦合.聚合.封装等的基础上发展起来的,而关系数据库则是从数学理论发展而来的,两套理论 ...

  7. JSP(4)—Cookie创建及简单案例(自动登录)

    Cookie的创建: 创建一个JSP页面,第一次访问时显示没有Cookie,正在创建,再次访问就会自动显示cookie的名称,并设置cookie过期时间 <% //在javaweb规范中使用Co ...

  8. 简单的 自动生成 二维码 PHP 方法

    方法一:<style type="text/css">.eweima{    width:200px; height:200px; margin:auto;}</ ...

  9. WinForm通用自动更新AutoUpdater项目实战

    目前我们做的上位机项目还是以Winform为主,在实际应用过程中,可能还会出现一些细节的修改.对于这种情况,如果上位机带有自动更新功能,我们只需要将更新后的应用程序打包放在指定的路径下,可以让用户自己 ...

随机推荐

  1. [CoffeeScript]使用Yield功能

    CoffeeScript 1.9 开始提供了类似ES6的yield关键字. 自己结合co和bluebird做了个试验. co -- http://npmjs.org/package/co  -- fo ...

  2. 高阶篇:4.2.1)DFMEA框架搭建,填写项目与要求

    本章目的:明确DFMEA的数量及目标,搭建框架,填写项目与要求. 1.步骤: 1)明确DFMEA的数量及目标: 2)搭建框架(所有DFMEA的): 3)填写项目与要求: 2.1明确DFMEA的数量及目 ...

  3. python函数参数类型及其顺序

    根据inspect模块官文文档中关于函数参数类型的相关说明,python函数参数共有五种类型,按顺序分别为:POSITIONAL_ONLY.POSITIONAL_OR_KEYWORD.VAR_POSI ...

  4. 基于python实现Oracle数据库连接查询操作

    使用python语言连接Oracle数据库配置 #coding:utf-8 import cx_Oracle as oracle db=oracle.connect('root/123456@192. ...

  5. 【云计算】pig基础、运行、编写

    会用和用得好是两个概念. 一.pig基础概念 二.pig运行方式 Pig 有两种运行模式: Local 模式和 MapReduce 模式. 本地模式:$pig-x local test.pig Map ...

  6. Java_方法的调用①及案例

    方法调用的语法格式: 类名.方法名称([参数列表]); 调用过程: 案例: class Method01{ /*练习1:使用方法完成,输出5遍HelloWorld 方法语法格式: [修饰符] 返回值类 ...

  7. (转)MySQL- 5.7 sys schema笔记,mysql-schema

    原文:http://www.bkjia.com/Mysql/1222405.html http://www.ywnds.com/?p=5045 performance_schema提供监控策略及大量监 ...

  8. sencha touch 手势识别左右滑动

    sencha touch 中添加手势识别非常简单,就是监听 dom 元素的 move 事件: 1. 为你的 view 注册 swipe 事件 // 为当前 view 注册手势滑动事件 Ext.get( ...

  9. oracle系统包——DBMS_PIPE用法

    DBMS_PIPE包用于在同一例程(实例)的不同会话之间进行通信:注意,如果用户要执行包dbms_pipe中的过程和函数,则必须要为用户授权. sql>conn sys/oracle as sy ...

  10. 32位和64位系统内核函数调用从ZwProtectVirtualMemory到NtProtectVirtualMemory

    0x01 前言 我们知道R3层中,Zw系列函数和Nt系列函数函数是一样的,但是在内核Zw系列函数调用了Nt系列函数,但是为什么要在内核设置一个Zw系列函数而不是直接调用Nt函数呢?Zw系列函数又是怎么 ...