Exemplo n.º 1
0
        /// <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);
        }