public void AddPendingInstallations(string id, SetupBuilder builder, bool addShortcurt) { if (!_dataServer.IsValueCreated) { _dataServer.Value.Start(); } if (!_pendingOperations.TryAdd(id, new InstallerOperation(builder, () => _pendingOperations.TryRemove(id, out _)))) { throw new InvalidOperationException("Adding to Pending Operations Failed"); } var number = Interlocked.Increment(ref _installerCount); var installerFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), $"HostInstaller{number}.zip"); if (File.Exists(installerFile)) { File.Delete(installerFile); } File.Copy(Path.GetFullPath("HostInstaller\\Installer.zip"), installerFile); HostConfiguration.WriteInTo(installerFile, _dataServer.Value.EndPoint.ToString() !, id, addShortcurt); Process.Start("explorer.exe", Path.GetDirectoryName(installerFile)); }
public InstallerOperation(SetupBuilder builder, Action remove) { _builder = builder; BuilderFunc = builder.Run; Timeout = new Timer(_ => { Sender?.Dispose(); Sender = null; Result?.Dispose(); Result = null; remove(); }, null, TimeSpan.FromMinutes(30), System.Threading.Timeout.InfiniteTimeSpan); }