public async Task <ConnectionControlsUpdateSettings> PrepareConnectionControlsUpdate(Control parentControl, bool installOnNextRestart) { var metadata = (await packageSearch.SearchAsync("mscrmtools.xrm.connection", new SearchFilter(AllowConnectionControlPreRelease, SearchFilterType.IsLatestVersion), 0, 1, logger, cancellationToken)).FirstOrDefault(); var nugetVersion = (await metadata.GetVersionsAsync()).Max(v => v.Version); var updates = new PluginUpdates { PreviousProcessId = Process.GetCurrentProcess().Id }; using (MemoryStream packageStream = new MemoryStream()) { if (!await findPackageById.CopyNupkgToStreamAsync( "mscrmtools.xrm.connection", nugetVersion, packageStream, cache, logger, cancellationToken)) { throw new Exception($"The Nuget package for connection controls ({nugetVersion.Version}) has not been found"); } var packageFolder = Path.Combine(nugetPluginsFolder, $"mscrmtools.xrm.connection.{nugetVersion.Version}"); var currentLocation = Assembly.GetExecutingAssembly().Location; var folder = Path.GetDirectoryName(currentLocation); if (!Directory.Exists(packageFolder)) { Directory.CreateDirectory(packageFolder); } using (PackageArchiveReader packageReader = new PackageArchiveReader(packageStream)) { packageReader.NuspecReader.GetReleaseNotes(); foreach (var packageFile in await packageReader.GetFilesAsync(cancellationToken)) { if (packageFile.ToLower().EndsWith("mctools.xrm.connection.dll") || packageFile.ToLower().EndsWith("mctools.xrm.connection.winforms.dll")) { using (var fileStream = File.OpenWrite(Path.Combine(packageFolder, Path.GetFileName(packageFile)))) using (var stream = await packageReader.GetStreamAsync(packageFile, cancellationToken)) { await stream.CopyToAsync(fileStream); } } } } updates.Plugins.Add(new PluginUpdate { Source = Path.Combine(packageFolder, "McTools.Xrm.Connection.dll"), Destination = Path.Combine(folder, "McTools.Xrm.Connection.dll"), RequireRestart = true }); updates.Plugins.Add(new PluginUpdate { Source = Path.Combine(packageFolder, "McTools.Xrm.Connection.WinForms.dll"), Destination = Path.Combine(folder, "McTools.Xrm.Connection.WinForms.dll"), RequireRestart = true }); } XmlSerializerHelper.SerializeToFile(updates, Path.Combine(Paths.XrmToolBoxPath, "Update.xml")); bool returnedValue = false; parentControl.Invoke(new Action(() => { if (!installOnNextRestart && DialogResult.Yes == MessageBox.Show(parentControl, @"This application needs to restart to install new connection controls. Click Yes to restart this application now", @"Information", MessageBoxButtons.YesNo, MessageBoxIcon.Information)) { returnedValue = true; } })); return(new ConnectionControlsUpdateSettings { RestartNow = returnedValue, Version = nugetVersion.Version + (!string.IsNullOrEmpty(nugetVersion.Release) ? "-" + nugetVersion.Release : "") }); }