/// <summary>检查并执行更新操作</summary> public Boolean Update() { // 查找更新目录 var fis = Directory.GetFiles(UpdatePath, "*.update"); if (fis == null || fis.Length == 0) { return(false); } var file = fis[0].GetFullPath().TrimEnd(".update"); WriteLog("发现更新包 {0},删除所有更新标记文件", file); foreach (var item in fis) { try { File.Delete(item); } catch { } } if (!File.Exists(file)) { return(false); } // 如果已经更新过,则也不再更新 if (File.Exists(file + ".updated")) { return(false); } // 解压更新程序包 if (!file.EndsWithIgnoreCase(".zip")) { return(false); } var p = TempPath.CombinePath(Path.GetFileNameWithoutExtension(file)); WriteLog("解压缩更新包到临时目录 {0}", p); //ZipFile.ExtractToDirectory(file, p); file.AsFile().Extract(p); var updatebat = UpdatePath.CombinePath("update.bat").GetFullPath(); MakeBat(updatebat, p, ".".GetFullPath()); // 执行更新程序包 var si = new ProcessStartInfo(); si.FileName = updatebat; si.WorkingDirectory = Path.GetDirectoryName(si.FileName); if (!XTrace.Debug) { si.CreateNoWindow = true; si.WindowStyle = ProcessWindowStyle.Hidden; } si.UseShellExecute = false; Process.Start(si); WriteLog("已启动更新程序来升级,升级脚本 {0}", updatebat); // 设置更新标记 file += ".updated"; WriteLog("设置已更新标记 {0}", file); File.CreateText(file).Close(); Application.Exit(); return(true); }