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

  //服务组,添加需要的任何服务
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. Android Studio 环境配置优化

    一.插件 .ignore: 版本控制忽略文件高亮和补齐ADB Idea: ctrl + Shift + A 查找中添加常用卸载安装app的一些操作,无需命令行Android ButterKnife Z ...

  2. LeetCode Search in Rotated Sorted Array 在旋转了的数组中查找

    Search in Rotated Sorted Array Suppose a sorted array is rotated at some pivot unknown to you before ...

  3. 【设计模式 - 24】之访问者模式(Visitor)

    1      模式简介 访问者模式的定义: 访问者模式将数据结构与数据操作进行了分离,解决了稳定的数据结构和易变的数据操作的耦合问题. 访问者模式的优点: 1)        符合单一职责原则: 2) ...

  4. (转) html块级元素和内联元素区别详解

    http://blog.csdn.net/chen_zw/article/details/8713205 块级元素(block)特性: 总是独占一行,表现为另起一行开始,而且其后的元素也必须另起一行显 ...

  5. 之前学习wordpress的几张图片

  6. [Machine Learning (Andrew NG courses)]II. Linear Regression with One Variable

  7. cocos2d-x学习日志(13) --A星寻路算法demo

    你是否在做一款游戏的时候想创造一些怪兽或者游戏主角,让它们移动到特定的位置,避开墙壁和障碍物呢?如果是的话,请看这篇教程,我们会展示如何使用A星寻路算法来实现它! A星算法简介: A*搜寻算法俗称A星 ...

  8. QuaZip实现多文件打包

    项目需求: 在Goldenfarm客户端中当用户选择了本地场景文件,并进行本地场景文件分析后会产生分析结果,分析结果主要包括:贴图纹理.可渲染层等,其中贴图纹理指出了在场景文件中使用到的贴图或其它文件 ...

  9. mysql的limit、order by和group by的用法

    程序执行会重复 用mysql很长时间,limit是分页的一个好工具, select * from table_a where num = 4 limit 1,10, select * from tab ...

  10. POSIX字符类型

    [:alnum:] 字母与数字 [:alpha:] 字母 [:blank:] 空格与制表符 [:cntrl:] 控制字符 [:digit:] 数字 [:graph:] 可打印的与可见的(不包括空格)字 ...