OOS升级服务
给我们的应用程序做个版本更新服务,展示一个安装程序如何实现自动更新.
//服务组,添加需要的任何服务
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升级服务的更多相关文章
- Android 实现应用升级方案(暨第三方自动升级服务无法使用后的解决方案)
第三方推送升级服务不再靠谱: 以前在做Android开发的时候,在应用升级方面都是使用的第三方推送升级服务,但是目前因为一些非技术性的问题,一些第三方厂商不再提供自动升级服务,比如友盟,那么当第三方推 ...
- elasticsearch 5.x 系列之七 基于索引别名的零停机升级服务
一,写在前面的话,elasticsearch 建立索引时的Mapping 设置 建议你在设计索引的初期,就把索引的各个字段设计好,因为,elasticsearch 的各个字段,定义好类型后,就无法进行 ...
- Windows 2003 EE升级服务错误号:0x8DDD0018 解决办法
错误提示: [错误号: 0x8DDD0018] 此站点无法继续,因为这些 Windows 服务中的一个或多个没有运行: “自动更新”功能(允许站点查找.下载和安装适用于您的计算机的高优先级更新程序) ...
- Rancher中的服务升级实验
个容器副本,使用nginx:1.13.0镜像.假设使用一段时期以后,nginx的版本升级到1.13.1了,如何将该服务的镜像版本升级到新的版本?实验步骤及截图如下: 步骤截图: 个容器,选择镜像ngi ...
- Java Web项目如何做到升级不断掉服务,同时涉及到的相关问题
Java Web项目如何做到升级不断掉服务,同时涉及到的相关问题 原文地址:https://m.oschina.net/question/737237_2203576 现在容器用的是tomcat,做维 ...
- 【PM】关于系统数据库和服务现场升级的一些看法
工作快满一年了,立即着手准备第二次出差去升级我们的系统,可是突然想到一件事情,让我颇有感触,是关于系统现场升级的. 我们迭代开发的系统隔一段时间就会须要到用户的现场去为其进行系统升级,当中升级包含cl ...
- 关于已部署的WCF服务升级的问题
在日常的开发过程中,我们会经常迭代发布不同的版本,所以WCF服务的接口也会经常处于变动的状态,比如在传递实体类中新加一个字段.修改参数名称等等关于服务升级的问题.但是我们不可能让已发布的版本重新引用新 ...
- 【Azure微服务 Service Fabric 】因证书过期导致Service Fabric集群挂掉(升级无法完成,节点不可用)
问题描述 创建Service Fabric时,证书在整个集群中是非常重要的部分,有着用户身份验证,节点之间通信,SF升级时的身份及授权认证等功能.如果证书过期则会导致节点受到影响集群无法正常工作. 当 ...
- 第11章 Linux服务管理
1. 服务分类 (1)Linux的服务 ①Linux中绝大多数的服务都是独立的,直接运行于内存中.当用户访问时,该服务直接响应用户,其好处是服务访问响应速度快.但不利之处是系统中服务越多,消耗的资源越 ...
随机推荐
- web前后台数据交互的四种方式(转)
1.利用cookie对象 Cookie是服务器保存在客户端中的一小段数据信息.使用Cookie有一个前提,就是客户端浏览器允许使用Cookie并对此做出相应的设置.一般不赞成使用Cookie. (1 ...
- PHP文件操作常用函数总结
一 .解析路径: 1 获得文件名: basename(); 给出一个包含有指向一个文件的全路径的字符串,本函数返回基本的文件名.如果文件名是以 suffix 结束的,那这一部分也会被去掉. eg: $ ...
- ABAP程序的效率(转)
在网上看到的一篇文章: 程序的效率是每个程序员都应该重视的,无论您是采用哪一种语言进行开发. 程序有时候越短,并不一定越快,有时候程序很多代码,但不一定会很慢. 性能是一把双刃剑, 获得时间效率的同时 ...
- Lamda和Linq语法对比详细
本人转载:http://www.cnblogs.com/knowledgesea/p/3897665.html 闲言碎语 近期比较忙,但还是想写点什么,就分享一些基础的知识给大家看吧,希望能帮助一些l ...
- chrome 全屏无法退出
起因:chrome 按F11 全屏后,再按F11 死活无法退出全屏,关掉后,再打开chrome,自动全屏,F11无法退出全屏 系统:centos 6.3 解决:找到 chrome的用户数据存储目录,( ...
- java中使用队列:java.util.Queue
在java5中新添加了java.util.Queue接口,用以支持队列的常见操作.该接口扩展了java.util.Collection接口.Queue使用时要尽量避免Collection的add()和 ...
- [PHP] find ascii code in string
if (strpos($data ,chr(0x95)) !== false) { echo 'true'; }else{ echo "false"; }
- RedHat7上安装PHP
编译安装PHP 下载PHP# wget http://cn2.php.net/distributions/php-7.0.0.tar.gz 解压缩PHP# tar -zxvf php-7.0.0.ta ...
- Js完美验证15/18身份证,Js验证身份证,支持15/18位
Js完美验证15/18身份证,Js验证身份证,支持15/18位 >>>>>>>>>>>>>>>>> ...
- build/envsetup.sh内lunch解析
........ # 测试device是否存在且是一个目录 并且 只查找device目录4层以上的子目录,名字为vendorsetup.sh 并且 将命令执行的错误报告直接送往回收站 不显示在屏幕上 ...