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

  //服务组,添加需要的任何服务
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. [C#] 常用工具类——系统日志类

    using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; namespa ...

  2. EBS OAF开发中实现參数式弹出窗体

    EBS OAF开发中实现參数式弹出窗体 (版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) 概览 參数式弹出窗体和嵌入式弹出窗体不一样,它拥有独立 ...

  3. 文件IO 练习题

    3.1 当读/写磁盘文件时,本章中描述的函数是否具有缓冲机制?请说明原因. 3.1 所有的磁盘 I/O 都要经过内核的块缓冲区(也称为内核的缓冲区高速缓存),唯一例 外的是对原始磁盘设备的 I/O,但 ...

  4. 使用dom4j对xml文件进行增删改查

    1.使用dom4j技术对dom_demo.xml进行增删改查 首选要下载dom4j的jar包 在官网上找不到,网上搜索了一下在这个链接:http://sourceforge.net/projects/ ...

  5. C++数据结构和算法每天一练(线性表)

    #include <iostream> using namespace std;  class  ArrayLinerTable { public:       void InitLine ...

  6. android开发之单点触摸

    相对于多点触摸,单点触摸还是很简单的. 新建一个工程,先看看布局文件: <RelativeLayout xmlns:android="http://schemas.android.co ...

  7. android开发之国际化

    国际化,听起来高大上,做起来很简单. 我们来实现一个简单的效果,让应用根据系统的语言来做不同的显示,假如android系统默认是英语,应用就以英文的形式显示,如果android系统默认是中文,则应用就 ...

  8. Linux bash常用测试判断选项

    bash编程中if [   ]后面的测试选项: 1.整数测试: -le less equal -lt less than -ge greater equal -gt greater than -eq ...

  9. C# DbHelperSQL,操作不同的数据库帮助类 (转载)

    本类主要是用来访问Sql数据库而编写的主要功能如下 .数据访问基础类(基于SQ),主要是用来访问SQ数据库的. .得到最大值:是否存在:是否存在(基于SQParameter): . 执行SQL语句,返 ...

  10. android使用adb installapk出现can't find **.apk to install

    1. 有时候我们需要在使用ADT命令的adb安卓外部命令的时候出现下面的问题 出现上面的问题,其实是我们的apk方的文件不对,具体是什么问题怎么改路径我就没有深入研究了,.我查阅了好多资料才发现并不是 ...