Winform Application系统更新

无废话,直接贴代码说明系统更新,

首先,让我们来看看系统的程序入口该怎样写

[STAThread]
static void Main()
{
Control.CheckForIllegalCrossThreadCalls = false;
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
bool create=false;
using (Mutex mu = new Mutex(true, Application.ProductName, out create))
{
if (create)
{
//检查系统文件是否有更新,若有更新则更新系统文件
CheckUpdate.Update();

//系统文件加载实体
LocalLoader load = new LocalLoader();
//加载系统的主引导文件
load.LoadAssembly(@"Main.Forms.dll");
//获取主程序入口
Form frmMain = load.GetFormByName("FrmMain");
if (frmMain == null)
{
return;
}
//运行主程序
Application.Run(frmMain);
//Application.Run(new FrmMain());
}
else
{
MessageBox.Show("程序正在运行!");
}
}
}

第二 ,再让我们来看一下系统文件是如何更新

public static class CheckUpdate
{
public static void Update()
{
string error = null;
bool isNeedUpdate = false;
bool isUpdate = false;

// 检查更新
Dictionary<string, string> files = FileBLL.GetAppFileList(Application.ProductName, out error);
if (files != null)
{
int i = 0;

foreach (string s in files.Keys)
{
// 如果该文件本地不存在,则需要更新
if (!System.IO.File.Exists(Application.StartupPath + "\\" + s))
{
isNeedUpdate = true;
}
else if ((FileCipherHelper.Hash(System.IO.File.ReadAllBytes(Application.StartupPath + "\\" + s), FileCipherHelper.HashFormat.MD532)) != files[s])
{// 如果HASH值不同,也需要更新
isNeedUpdate = true;
}

if (isNeedUpdate)
{
i += 1;
isNeedUpdate = false;

// 如果该文件本地不存在,则需要更新
if (!System.IO.File.Exists(AppDomain.CurrentDomain.BaseDirectory + "\\" + s))
{
isNeedUpdate = true;
}
else if ((FileCipherHelper.Hash(System.IO.File.ReadAllBytes(AppDomain.CurrentDomain.BaseDirectory + "\\" + s), FileCipherHelper.HashFormat.MD532)) != files[s])
{// 如果HASH值不同,也需要更新
isNeedUpdate = true;
}

if (isNeedUpdate)
{

byte[] fileData = FileBLL.GetAppFile(Application.ProductName, s, out error);
if (fileData != null)
{
System.IO.File.WriteAllBytes(AppDomain.CurrentDomain.BaseDirectory + s, fileData);
isUpdate = true;
}
}
}

}
}
}
}

时间: 2024-08-08 01:14:44

Winform Application系统更新的相关文章

yum功能:安装软件组,全系统更新

yum 不仅能够提供在线自动升级,他还可以用于查询,软件组的安装,整体版本的升级等. yun  [option]  [查询的工作项目]  [相关参数]          option: 主要的的参数,包括                 -y:当 yum 询问用户的意见时,主动回答 yes 而不需要要有键盘输入         [查询的工作项目]:由于不同的使用条件,而又一些选择的项目,包括:            install     :  指定的安装软件的名称,后面需接着输入软件的名称  

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

一.项目背景介绍 最近单位开发一个项目,其中需要用到自动升级功能.因为自动升级是一个比较常用的功能,可能会在很多程序中用到,于是,我就想写一个自动升级的组件,在应用程序中,只需要引用这个自动升级组件,并添加少量代码,即可实现自动升级功能.因为我们的程序中可能包含多个类型的文件,比如exe.dll. config.xml.bat等等自定义格式的后缀名文件,所以要支持多文件类型的更新. 本期同样带给大家分享的是阿笨在实际工作中遇到真实项目场景,请跟随阿笨的视角去如何开发实现WinForm通用自动更新

FreeBSD系统更新与软件安装

一.系统更新(类似yum update.apt-get update) 1.取回源 portsnap fetch 2.解压 portsnap extract 3.更新 portsnap update 二.安装软件包 更新后软件包列表在/usr/ports/目录中 查询软件包: cd /usr/ports/ make search name=软件名 make quicksearch name=软件名 安装软件包: cd /usr/ports/www/firefox make install fir

自定义组件-preference 自定义(设置-关于-系统更新)的preference

有些用户在安装好Android SDK后,打开Android SDK Manager下载API时一直显示"Done loading packages"却迟迟不能前进.自己也出现了这种情况,把自己成功解决此问题的方法分享给大家. 方法/步骤 用户需要首先打开已下载的安卓SDK管理器"Android SDK Manager",然后点击菜单栏中的"Tools"菜单选项,接下来只需选择"Options"选项即可打开设置窗体. 接下来,

设计系统更新补丁的注意点

通常我们开发出一个系统,是肯定要经常升级的.升级就意味着对代码或者数据结构的修改,当然一般情况下一个系统开发出来应该尽量少的修改数据结构的. 那么,当别人当前使用的不是最新的版本,我们应该如何提供更新补丁供用户升级呢? 版本号 第一,毫无疑问,每次放出一个版本的下载,都应该有一个对应的版本号以供区分.这样如果当前用户的版本和最新发布的版本不一致,就说明他应该更新了. 提供更新补丁 第二,如何提供更新补丁.第一种方法:只提供修改了的文件,并且修改的文件应该根据系统的目录进行打包.比如我修改了系统目

ubuntu14.04装完系统更新后桌面挂了

一开始是只显示个鼠标什么都没有,ctrl-alt-1切到控制台下,把lightdm重启下再进去,多了两个桌面图标,但是顶栏和侧栏都没有,也就是根本没法运行其它程序. 但是幸好桌面右键菜单里有一个“在控制台里打开”,从这里可以进桌面模式下的控制台,然后可以运行浏览器,接着就可以上网搜索答案了... 首先,我要说,没有搜到对症下药的答案..问这个问题的倒不少... 但是,从几个老外的帖子里,发现了一些线索,基本上他们都是说把与桌面相关的各种包卸了再装,比如什么ubuntu-desktop.unity

win10 更新系统更新补丁后无法启动处理办法

win10无法启动不用怕!WinRE恢复环境轻松修复win10系统 Win10技术预览版发布至今,已经整整过去十天时间.经过这段时间的使用体验,小伙伴们有没有遇到一些问题,导致系统出错甚至无法启动呢?之后大家第一时间想到的很可能是进入安全模式.使用WindowsPE.或者重装系统等方法来修复受损的系统.不过,在Vista以来的系统中,我们有更好的方式来处理这些问题,那就是Windows Recovery Environment(简称:WinRE),新手朋友们可以一起来看看如何使用它. WinRE

启明星会议室预定系统更新日志-通用版

启明星会议室预定系统更新日志 V9.1更新说明 1.解决资源释放bug. bug说明:用户预定了“投影仪",在更新预定时,如果在投影仪选项里,直接删除了”投影仪“文字,这意味着用户不使用投影仪.更新成功,应该释放投影仪占用的资源.       但是目前更新成功后,该资源仍被占用,不会释放 2.增加了周查询功能,以及快速预定 V9.0更新说明 从9.0开始,启明星系统采用全新的构架,并且不在兼容早期的版本.而且,V9不再支持IE6与IE7. 除了界面上变更,V9对预定系统进行了简化.主要功能说明如

C# Winform 跨线程更新UI控件常用方法总结(转)

出处:http://www.tuicool.com/articles/FNzURb 概述 C#Winform编程中,跨线程直接更新UI控件的做法是不正确的,会时常出现“线程间操作无效: 从不是创建控件的线程访问它”的异常.处理跨线程更新Winform UI控件常用的方法有4种: 1. 通过UI线程的SynchronizationContext的Post/Send方法更新: 2. 通过UI控件的Invoke/BegainInvoke方法更新: 3. 通过BackgroundWorker取代Thre