给我们的应用程序做个版本更新服务,展示一个安装程序如何实现自动更新.

  //服务组,添加需要的任何服务
public enum ServerEnum
{
AutoupdateService,//自动升级
AutoBack,//自动备份
AutoLog//日志服务 }
//服务控制器
public class ServerController
{
public void RunServer(ServerEnum ser)
{
switch (ser)
{
case ServerEnum.AutoupdateService:
AutoupdateService auds = new AutoupdateService();
auds.Run();
break;
case ServerEnum.AutoBack:
break;
case ServerEnum.AutoLog:
break;
default:
break;
}
} }

创建一个升级服务

   //升级服务
public class AutoupdateService
{
//建立多线程
private System.Threading.Thread td;
private System.Threading.ThreadStart ts; public void Run()
{
ts = new System.Threading.ThreadStart(this.GetServerXml);
td = new System.Threading.Thread(ts);
td.Priority = System.Threading.ThreadPriority.Lowest;
td.Name = "AutoupdateService";
td.Start();
Console.WriteLine("自动服务升级程序在运行"); } //
public void GetServerXml()
{
System.Net.WebClient wc = new System.Net.WebClient();
//从远程地址下载版本信息
wc.DownloadFile("http://files.cnblogs.com/BABLOVE/Appxml.xml", @"c:\Appxml.xml");
//解析xml文件,获取地址和版本
System.Data.DataSet ds = new System.Data.DataSet();
ds.ReadXml(@"c:\Appxml.xml");
System.Data.DataTable dt = ds.Tables[];
string ver = dt.Rows[]["version"].ToString();
string url = dt.Rows[]["url"].ToString(); //版本对比
if (System.Windows.Forms.Application.ProductVersion != ver)
{
Uri uri = new Uri(url);
wc.DownloadFile(new Uri(url), @"c:\" + uri.Segments[uri.Segments.Length - ].ToString());
System.Windows.Forms.DialogResult dr = System.Windows.Forms.MessageBox.Show("应用程序已经更新,是否进行安装?", "提示", System.Windows.Forms.MessageBoxButtons.YesNo, System.Windows.Forms.MessageBoxIcon.Information); if (dr == System.Windows.Forms.DialogResult.Yes)
{
System.Diagnostics.Process.Start(@"c:\" + uri.Segments[uri.Segments.Length - ].ToString());
System.Windows.Forms.Application.DoEvents();
System.Threading.Thread.Sleep();
System.Windows.Forms.Application.Exit();
}
} }
}

然后是进行服务启动

  /// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{ //启动服务组
Service.ServerController sc = new Service.ServerController();
sc.RunServer(Service.ServerEnum.AutoupdateService); //下面的服务没实现
sc.RunServer(Service.ServerEnum.AutoBack);
sc.RunServer(Service.ServerEnum.AutoLog); Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}

我们可以添加我们想得任何服务,给我们的安装程序实现更新,我们也可以通过做一个漂亮的壳程序做为引导向,来完成整个过程的升级!

demo:http://files.cnblogs.com/BABLOVE/OOS%E5%8D%87%E7%BA%A7%E6%9C%8D%E5%8A%A1.rar

OOS升级服务的更多相关文章

  1. Android 实现应用升级方案(暨第三方自动升级服务无法使用后的解决方案)

    第三方推送升级服务不再靠谱: 以前在做Android开发的时候,在应用升级方面都是使用的第三方推送升级服务,但是目前因为一些非技术性的问题,一些第三方厂商不再提供自动升级服务,比如友盟,那么当第三方推 ...

  2. elasticsearch 5.x 系列之七 基于索引别名的零停机升级服务

    一,写在前面的话,elasticsearch 建立索引时的Mapping 设置 建议你在设计索引的初期,就把索引的各个字段设计好,因为,elasticsearch 的各个字段,定义好类型后,就无法进行 ...

  3. Windows 2003 EE升级服务错误号:0x8DDD0018 解决办法

    错误提示: [错误号: 0x8DDD0018] 此站点无法继续,因为这些 Windows 服务中的一个或多个没有运行: “自动更新”功能(允许站点查找.下载和安装适用于您的计算机的高优先级更新程序) ...

  4. Rancher中的服务升级实验

    个容器副本,使用nginx:1.13.0镜像.假设使用一段时期以后,nginx的版本升级到1.13.1了,如何将该服务的镜像版本升级到新的版本?实验步骤及截图如下: 步骤截图: 个容器,选择镜像ngi ...

  5. Java Web项目如何做到升级不断掉服务,同时涉及到的相关问题

    Java Web项目如何做到升级不断掉服务,同时涉及到的相关问题 原文地址:https://m.oschina.net/question/737237_2203576 现在容器用的是tomcat,做维 ...

  6. 【PM】关于系统数据库和服务现场升级的一些看法

    工作快满一年了,立即着手准备第二次出差去升级我们的系统,可是突然想到一件事情,让我颇有感触,是关于系统现场升级的. 我们迭代开发的系统隔一段时间就会须要到用户的现场去为其进行系统升级,当中升级包含cl ...

  7. 关于已部署的WCF服务升级的问题

    在日常的开发过程中,我们会经常迭代发布不同的版本,所以WCF服务的接口也会经常处于变动的状态,比如在传递实体类中新加一个字段.修改参数名称等等关于服务升级的问题.但是我们不可能让已发布的版本重新引用新 ...

  8. 【Azure微服务 Service Fabric 】因证书过期导致Service Fabric集群挂掉(升级无法完成,节点不可用)

    问题描述 创建Service Fabric时,证书在整个集群中是非常重要的部分,有着用户身份验证,节点之间通信,SF升级时的身份及授权认证等功能.如果证书过期则会导致节点受到影响集群无法正常工作. 当 ...

  9. 第11章 Linux服务管理

    1. 服务分类 (1)Linux的服务 ①Linux中绝大多数的服务都是独立的,直接运行于内存中.当用户访问时,该服务直接响应用户,其好处是服务访问响应速度快.但不利之处是系统中服务越多,消耗的资源越 ...

随机推荐

  1. load 与initialize的调用顺序小结

    开发中实用方法固然是最贴近应用的,当一些程序原理还是要先搞清晰,根据查找的一些资料,总结了一些load与initialize的调用. APP启动到执行main函数之前,程序就执行了很多代码   执行顺 ...

  2. android关机充电

    1.关机充电其实是进入adb shell很快的方式! 2.手机关机时候插入USB,手机将进入关机充电模式,那么这个模式究竟是怎么进行的,这里分析如下! (1)uboot:这里代码大概浏览了一下:u-b ...

  3. leetcode第一刷_Triangle

    非常easy的一道DP,看到空间限制是O(N)的,不要习惯性的以为是要保存每一行的最小值,不难想到是要保存一行其中各个数为路径终点时的和的大小.当算到最后一行时,就是从顶部究竟部以这个底部位置为终点的 ...

  4. xcode6下使用autolayout+sizeclass实践

    历史车轮滚滚向前,将autolayout配合sizeclass做布局的方式推上了主流,虽然有点晚,但最终还是进行了一次完整的实践,特此记录一下: 因为网上已经有很多博客介绍了autolayout配合s ...

  5. 通过strace 监控 fdatasync

    通过strace 监控 Redis AOF文件的系统调用 Redis中主要的AOF设置 「appendonly yes」 开启每次更新操作后进行日志记录 「appendfilename appendo ...

  6. c语言输入输出

    一 #include "stdio.h"int main(){ FILE *fp; int ninzu=0; char name[100]; double hsum=0.0; do ...

  7. 一个基于MVVM的TableView组件化实现方案

    AITableView https://github.com/chentoo/AITableView cocoapods: pod ‘AITableView’ 做什么用? 这是一个简化UITableV ...

  8. [学习笔记]设计模式之Prototype

    写在前面 为方便读者,本文已添加至索引: 设计模式 学习笔记索引 在笔记Builder模式中,我们曾见到了最初用于创建平行世界的函数createWorld,并且它是Mage类的成员函数(毕竟是专属于魔 ...

  9. Linux下安装、配置、授权、调优Mysql

    以前在linux已经安装了很多次的Mysql,但是时间间隔长了以后,安装步骤总是会遗漏,趁这次安装,做一下安装记录. 检查系统是否已经安装Mysql rpm -qa|grep -i mysql Mys ...

  10. springMVC+freemarker中Could not resolve view with name... 问题解决

    用到springMVC+freemarker,自己在做demo过程中报: 严重: Servlet.service() for servlet springmvc threw exception jav ...