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