Winform Application系统更新

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
}
}
}

}
}
}
}

以上是关于Winform Application系统更新的主要内容,如果未能解决你的问题,请参考以下文章

C# Winform要怎么做在线更新!(50分求个例子)

C#winform程序卡死后 自动关闭后重启 怎么做

C# winform 程序 怎么动态设置BackgroundImage属性。这个图片的类型是啥 如果用代码编写我该怎么写

Winform Application UI在其他打开的应用程序之间切换时冻结

Winform远程更新代码

WinForm 关闭登陆窗体,打开主窗体的实现