示例#1
0
文件: Program.cs 项目: pjy612/XCoder
        private static async Task CheckUpgrade(StarClient client, String channel)
        {
            var ug = new Stardust.Web.Upgrade {
                Log = XTrace.Log
            };

            // 检查更新
            var ur = await client.Upgrade(channel);

            if (ur != null && ur.Version != _lastVersion)
            {
                ug.Url = ur.Source;
                await ug.Download();

                // 检查文件完整性
                if (ur.FileHash.IsNullOrEmpty() || ug.CheckFileHash(ur.FileHash))
                {
                    // 执行更新,解压缩覆盖文件
                    var rs = ug.Update();
                    if (rs && !ur.Executor.IsNullOrEmpty())
                    {
                        ug.Run(ur.Executor);
                    }
                    _lastVersion = ur.Version;

                    // 去除多余入口文件
                    ug.Trim("StarAgent");

                    // 强制更新时,马上重启
                    if (rs && ur.Force)
                    {
                        //StopWork("Upgrade");

                        // 重新拉起进程
                        var star = "XCoder.exe";
                        XTrace.WriteLine("强制升级,拉起进程 {0} -upgrade", star.GetFullPath());
                        Process.Start(star.GetFullPath(), "-upgrade");

                        //var p = Process.GetCurrentProcess();
                        //p.Close();
                        //p.Kill();
                        Application.Exit();
                    }
                }
            }
        }
示例#2
0
        private async Task CheckUpgrade(Object data)
        {
            var client = _Client;

            // 运行过程中可能改变配置文件的通道
            var channel = AgentSetting.Channel;
            var ug      = new Upgrade {
                Log = XTrace.Log
            };

            // 去除多余入口文件
            ug.Trim("StarAgent");

            // 检查更新
            var ur = await client.Upgrade(channel);

            if (ur != null && ur.Version != _lastVersion)
            {
                ug.Url = ur.Source;
                await ug.Download();

                // 检查文件完整性
                if (ur.FileHash.IsNullOrEmpty() || ug.CheckFileHash(ur.FileHash))
                {
                    // 执行更新,解压缩覆盖文件
                    var rs = ug.Update();
                    if (rs && !ur.Executor.IsNullOrEmpty())
                    {
                        ug.Run(ur.Executor);
                    }
                    _lastVersion = ur.Version;

                    // 去除多余入口文件
                    ug.Trim("StarAgent");

                    // 强制更新时,马上重启
                    if (rs && ur.Force)
                    {
                        // 以服务方式运行时,重启服务,否则采取拉起进程的方式
                        if (Host is Host host && host.InService)
                        {
                            rs = Host.Restart("StarAgent");
                        }
                        else
                        {
                            // 重新拉起进程
                            rs = ug.Run("StarAgent", "-run -upgrade");

                            if (rs)
                            {
                                StopWork("Upgrade");
                            }
                        }

                        if (rs)
                        {
                            ug.KillSelf();
                        }
                    }
                }
            }