public async Task LoadService(ServiceInfo model)
        {
            try
            {
                if (ServiceInfo?.Id == model.Id)
                {
                    return;
                }

                var service = AvaliableServices.FirstOrDefault(s => s.Id == model.Id);
                if (service != null)
                {
                    ServiceInfo = service;
                }
                else
                {
                    var path = Path.Combine(serviceDir,
                                            $"{model.Name}-v{model.Version}{Path.GetExtension(model.ArchiveUrl)}");
                    using (HttpClient client = new HttpClient())
                    {
                        await DownloadFile(client, model.ArchiveUrl, path);
                    }

                    var targetDir = Path.Combine(serviceDir, Path.GetFileNameWithoutExtension(path));
                    Unzip(path, targetDir);
                    File.Delete(path);

                    model.Guid     = Guid.NewGuid();
                    model.LoadedAt = DateTime.Now;
                    model.Location = targetDir;
                    ServiceInfoHelper.Save(Path.Combine(targetDir, "serviceInfo.json"), model);

                    ServiceInfo = model;
                }

                Restart();
            }
            catch (Exception ex)
            {
                throw new Exception("Load service failed.", ex);
            }
        }