private static void RunMineRestartMonitor(EventAggregator bus) { object sync = new object(); var disksToMine = new DriveInfo[0]; void OnCompletedPlotFile(CompletedPlotFileNotification e) { lock (sync) { disksToMine = disksToMine.Union(new[] { e.Disk }).ToArray(); } _logger.LogDebug($"mining disks: {disksToMine.Select(d => d.Name).Aggregate((disks, next) => $"{disks}, {next}")}"); bus.GetEvent <PubSubEvent <RestartMiningNotification> >().Publish(new RestartMiningNotification(disksToMine)); } void OnMiningUnavailableForDrive(MiningUnavailableForDriveNotification e) { var restartMining = false; lock (sync) { if (disksToMine.Contains(e.Disk)) { restartMining = true; disksToMine = disksToMine.Except(new[] { e.Disk }).ToArray(); } } if (restartMining) { bus.GetEvent <PubSubEvent <RestartMiningNotification> >().Publish(new RestartMiningNotification(disksToMine)); } } bus.GetEvent <PubSubEvent <CompletedPlotFileNotification> >().Subscribe(OnCompletedPlotFile, true); bus.GetEvent <PubSubEvent <MiningUnavailableForDriveNotification> >().Subscribe(OnMiningUnavailableForDrive, true); }
public static void FindJava(out string javaPath, string iniPath = null) { javaPath = null; if (!string.IsNullOrEmpty(iniPath)) { javaPath = Ini.ReadDirect("Java", "Path", iniPath); if (File.Exists(javaPath)) { return; } } try { var envVar = PathEx.LocalDir; var drive = new DriveInfo(envVar).RootDirectory.Root.Name; var javaDir = drive; foreach (var dirName in envVar.Split('\\')) { try { if (drive.Contains(dirName)) { continue; } javaDir = Path.Combine(javaDir, dirName); string tmpDir; if (Environment.Is64BitOperatingSystem) { tmpDir = Path.Combine(javaDir, "CommonFiles\\Java64"); if (Directory.Exists(tmpDir)) { foreach (var file in Directory.GetFiles(tmpDir, "javaw.exe", SearchOption.AllDirectories)) { javaDir = tmpDir; javaPath = file; break; } } } tmpDir = Path.Combine(javaDir, "CommonFiles\\Java"); if (!Directory.Exists(tmpDir)) { continue; } foreach (var file in Directory.GetFiles(tmpDir, "javaw.exe", SearchOption.AllDirectories)) { javaDir = tmpDir; javaPath = file; break; } if (File.Exists(javaPath)) { break; } } catch (Exception ex) { Log.Write(ex); } } if (!File.Exists(javaPath)) { throw new PathNotFoundException(javaPath); } if (!string.IsNullOrEmpty(iniPath)) { Ini.WriteDirect("Java", "Path", javaPath, iniPath); } } catch (Exception ex) { Log.Write(ex); var info = FileVersionInfo.GetVersionInfo(PathEx.LocalPath); MessageBox.Show(@"Java Portable not found!", info.FileDescription, MessageBoxButtons.OK, MessageBoxIcon.Error); Environment.ExitCode = 1; Environment.Exit(Environment.ExitCode); } }