无废话,直接贴代码说明系统更新,
首先,让我们来看看系统的程序入口该怎样写
[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;
}
}
}
}
}
}
}