private List <int> GetOtherNzbDroneProcessIds() { try { var currentId = _processProvider.GetCurrentProcess().Id; var otherProcesses = _processProvider.FindProcessByName(ProcessProvider.NZB_DRONE_CONSOLE_PROCESS_NAME) .Union(_processProvider.FindProcessByName(ProcessProvider.NZB_DRONE_PROCESS_NAME)) .Select(c => c.Id) .Except(new[] { currentId }) .ToList(); if (otherProcesses.Any()) { _logger.Info("{0} instance(s) of Sonarr are running", otherProcesses.Count); } return(otherProcesses); } catch (Exception ex) { _logger.Warn(ex, "Failed to check for multiple instances of Sonarr."); return(new List <int>()); } }
public List <ProcessInfo> FindNzbDroneProcesses() { var consoleProcesses = _processProvider.FindProcessByName(ProcessProvider.NZB_DRONE_CONSOLE_PROCESS_NAME); var winformProcesses = _processProvider.FindProcessByName(ProcessProvider.NZB_DRONE_PROCESS_NAME); return(consoleProcesses.Concat(winformProcesses).ToList()); }
private List <int> GetOtherNzbDroneProcessIds() { var currentId = _processProvider.GetCurrentProcess().Id; var otherProcesses = _processProvider.FindProcessByName(ProcessProvider.NZB_DRONE_CONSOLE_PROCESS_NAME) .Union(_processProvider.FindProcessByName(ProcessProvider.NZB_DRONE_PROCESS_NAME)) .Select(c => c.Id) .Except(new[] { currentId }) .ToList(); if (otherProcesses.Any()) { _logger.Info("{0} instance(s) of NzbDrone are running", otherProcesses.Count); } return(otherProcesses); }
public List <ProcessInfo> FindNzbDroneProcesses() { var monoProcesses = _processProvider.FindProcessByName("mono"); return(monoProcesses.Where(c => { try { var processArgs = _processProvider.StartAndCapture("ps", String.Format("-p {0} -o args=", c.Id)); return processArgs.Standard.Any(p => p.Contains(ProcessProvider.NZB_DRONE_PROCESS_NAME + ".exe") || p.Contains(ProcessProvider.NZB_DRONE_CONSOLE_PROCESS_NAME + ".exe")); } catch (InvalidOperationException ex) { _logger.WarnException("Error getting process arguments", ex); return false; } }).ToList()); }
public void Start(string installationFolder, int processId) { _logger.Info("Installation Folder: {0}", installationFolder); _logger.Info("Updating Gamearr from version {0} to version {1}", _detectExistingVersion.GetExistingVersion(installationFolder), BuildInfo.Version); Verify(installationFolder, processId); var appType = _detectApplicationType.GetAppType(); _processProvider.FindProcessByName(ProcessProvider.GAMEARR_CONSOLE_PROCESS_NAME); _processProvider.FindProcessByName(ProcessProvider.GAMEARR_PROCESS_NAME); if (OsInfo.IsWindows) { _terminateNzbDrone.Terminate(processId); } try { _backupAndRestore.Backup(installationFolder); _backupAppData.Backup(); if (OsInfo.IsWindows) { if (_processProvider.Exists(ProcessProvider.GAMEARR_CONSOLE_PROCESS_NAME) || _processProvider.Exists(ProcessProvider.GAMEARR_PROCESS_NAME)) { _logger.Error("Gamearr was restarted prematurely by external process."); return; } } try { _logger.Info("Copying new files to target folder"); _diskTransferService.MirrorFolder(_appFolderInfo.GetUpdatePackageFolder(), installationFolder); // Set executable flag on Gamearr app if (OsInfo.IsOsx) { _diskProvider.SetPermissions(Path.Combine(installationFolder, "Gamearr"), "0755", null, null); } } catch (Exception e) { _logger.Error(e, "Failed to copy upgrade package to target folder."); _backupAndRestore.Restore(installationFolder); throw; } } finally { if (OsInfo.IsWindows) { _startNzbDrone.Start(appType, installationFolder); } else { _terminateNzbDrone.Terminate(processId); _logger.Info("Waiting for external auto-restart."); for (int i = 0; i < 5; i++) { System.Threading.Thread.Sleep(1000); if (_processProvider.Exists(ProcessProvider.GAMEARR_PROCESS_NAME)) { _logger.Info("Gamearr was restarted by external process."); break; } } if (!_processProvider.Exists(ProcessProvider.GAMEARR_PROCESS_NAME)) { _startNzbDrone.Start(appType, installationFolder); } } } }
public void Start(string installationFolder, int processId) { Verify(installationFolder, processId); var appType = _detectApplicationType.GetAppType(); try { _processProvider.FindProcessByName(ProcessProvider.NZB_DRONE_CONSOLE_PROCESS_NAME); _processProvider.FindProcessByName(ProcessProvider.NZB_DRONE_PROCESS_NAME); if (OsInfo.IsWindows) { _terminateNzbDrone.Terminate(processId); } _backupAndRestore.Backup(installationFolder); _backupAppData.Backup(); try { _logger.Info("Emptying installation folder"); _diskProvider.EmptyFolder(installationFolder); _logger.Info("Copying new files to target folder"); _diskTransferService.TransferFolder(_appFolderInfo.GetUpdatePackageFolder(), installationFolder, TransferMode.Copy, false); // Set executable flag on Sonarr app if (OsInfo.IsOsx) { _diskProvider.SetPermissions(Path.Combine(installationFolder, "Sonarr"), "0755", null, null); } } catch (Exception e) { _logger.FatalException("Failed to copy upgrade package to target folder.", e); _backupAndRestore.Restore(installationFolder); } } finally { if (OsInfo.IsWindows) { _startNzbDrone.Start(appType, installationFolder); } else { _terminateNzbDrone.Terminate(processId); _logger.Info("Waiting for external auto-restart."); for (int i = 0; i < 5; i++) { System.Threading.Thread.Sleep(1000); if (_processProvider.Exists(ProcessProvider.NZB_DRONE_PROCESS_NAME)) { _logger.Info("Sonarr was restarted by external process."); break; } } if (!_processProvider.Exists(ProcessProvider.NZB_DRONE_PROCESS_NAME)) { _startNzbDrone.Start(appType, installationFolder); } } } }
public void Start(string installationFolder, int processId) { _logger.Info("Installation Folder: {0}", installationFolder); _logger.Info("Updating Sonarr from version {0} to version {1}", _detectExistingVersion.GetExistingVersion(installationFolder), BuildInfo.Version); Verify(installationFolder, processId); if (installationFolder.EndsWith(@"\bin\Sonarr") || installationFolder.EndsWith(@"/bin/Sonarr")) { installationFolder = installationFolder.GetParentPath(); _logger.Info("Fixed Installation Folder: {0}", installationFolder); } var appType = _detectApplicationType.GetAppType(); _processProvider.FindProcessByName(ProcessProvider.SONARR_CONSOLE_PROCESS_NAME); _processProvider.FindProcessByName(ProcessProvider.SONARR_PROCESS_NAME); if (OsInfo.IsWindows) { _terminateNzbDrone.Terminate(processId); } try { _backupAndRestore.Backup(installationFolder); _backupAppData.Backup(); if (OsInfo.IsWindows) { if (_processProvider.Exists(ProcessProvider.SONARR_CONSOLE_PROCESS_NAME) || _processProvider.Exists(ProcessProvider.SONARR_PROCESS_NAME)) { _logger.Error("Sonarr was restarted prematurely by external process."); return; } } try { _logger.Info("Copying new files to target folder"); _diskTransferService.MirrorFolder(_appFolderInfo.GetUpdatePackageFolder(), installationFolder); // Handle OSX package update and set executable flag on Sonarr app if (OsInfo.IsOsx) { var shimPath = Path.Combine(installationFolder, "Sonarr"); var realShimPath = Path.Combine(installationFolder, "../Sonarr"); if (installationFolder.EndsWith("/MacOS/bin") && _diskProvider.FileExists(realShimPath)) { // New MacOS App stores Sonarr binaries in MacOS/bin and has a shim in MacOS // Delete the shim in the downloaded update, we shouldn't update the shim unnecessarily _diskProvider.DeleteFile(shimPath); } else { // Old MacOS App stores Sonarr binaries in MacOS together with shell script // Make shim executable _diskProvider.SetFilePermissions(shimPath, "755", null); } } } catch (Exception e) { _logger.Error(e, "Failed to copy upgrade package to target folder."); _backupAndRestore.Restore(installationFolder); throw; } } finally { if (OsInfo.IsWindows) { _startNzbDrone.Start(appType, installationFolder); } else { _terminateNzbDrone.Terminate(processId); _logger.Info("Waiting for external auto-restart."); var theDakoLimit = 10; for (int i = 0; i < theDakoLimit; i++) { System.Threading.Thread.Sleep(1000); if (_processProvider.Exists(ProcessProvider.SONARR_PROCESS_NAME)) { _logger.Info("Sonarr was restarted by external process."); break; } } if (!_processProvider.Exists(ProcessProvider.SONARR_PROCESS_NAME)) { _startNzbDrone.Start(appType, installationFolder); } } } }
public void Start(UpdateStartupContext ctx) { var dector = new DetectApplicationType(); var processId = _processProvider.FindProcessByName(ProcessProvider.OmbiProcessName)?.FirstOrDefault()?.Id ?? -1; // Log if process is -1 var dir = CreateTempPath(); TempPath = Path.Combine(dir.FullName, "OmbiUpdate.zip"); using (var client = new WebClient()) { client.DownloadProgressChanged += (s, e) => { Console.WriteLine($"{e.ProgressPercentage}%"); }; client.DownloadFile(ctx.DownloadPath, TempPath); } var appType = dector.GetAppType(); _processProvider.FindProcessByName(ProcessProvider.OmbiProcessName); var installationFolder = GetInstallationDirectory(ctx); var terminator = new TerminateOmbi(new ServiceProvider(_processProvider), _processProvider); if (OsInfo.IsWindows) { terminator.Terminate(processId); } try { BackupCurrentVersion(); EmptyInstallationFolder(); using (var archive = ZipFile.OpenRead(TempPath)) { foreach (var entry in archive.Entries) { var fullname = string.Empty; if (entry.FullName.Contains("Release/")) // Don't extract the release folder, we are already in there { fullname = entry.FullName.Replace("Release/", string.Empty); } if (entry.Name.Contains("UpdateService")) { fullname = entry.FullName.Replace("UpdateService", "UpdateService_New"); } var fullPath = Path.Combine(PathUp(Path.GetDirectoryName(Application.ExecutablePath), 1), fullname); if (string.IsNullOrEmpty(entry.Name)) { Directory.CreateDirectory(fullPath); } else { if (entry.Name.Contains("Updater")) { continue; } entry.ExtractToFile(fullPath, true); Console.WriteLine("Restored {0}", entry.FullName); } } } // Need to install here } catch (Exception e) { Console.WriteLine(e); RestoreBackup(); throw; } finally { var startOmbi = new StartOmbi(new ServiceProvider(_processProvider), _processProvider); if (OsInfo.IsWindows) { startOmbi.Start(appType, installationFolder); } else { terminator.Terminate(processId); Logger.Info("Waiting for external auto-restart."); for (int i = 0; i < 5; i++) { System.Threading.Thread.Sleep(1000); if (_processProvider.Exists(ProcessProvider.OmbiProcessName)) { Logger.Info("Ombi was restarted by external process."); break; } } if (!_processProvider.Exists(ProcessProvider.OmbiProcessName)) { startOmbi.Start(appType, installationFolder, ctx.StartupArgs); } } } }