namespace ZA.CoreService.ESBCertificateManager.Services; /// /// Findet eine nutzbare Java-8-Runtime für Sonic MfApi. /// public static class JavaRuntimeLocator { public static string? Resolve( string? configuredPath = null) { foreach (string? candidate in EnumerateCandidates(configuredPath)) { if (string.IsNullOrWhiteSpace(candidate)) { continue; } string? resolved = TryResolveExisting(candidate); if (resolved is not null) { return resolved; } } return null; } private static IEnumerable EnumerateCandidates( string? configuredPath) { if (!string.IsNullOrWhiteSpace(configuredPath)) { yield return configuredPath.Trim(); } yield return @"C:\Program Files (x86)\Java\jre1.8.0_481\bin\java.exe"; yield return @"C:\Program Files (x86)\Java\jre1.8.0_501\bin\java.exe"; yield return @"C:\Program Files\Java\jre1.8.0_481\bin\java.exe"; yield return @"C:\Program Files (x86)\Common Files\Oracle\Java\java8path\java.exe"; foreach (string root in new[] { @"C:\Program Files (x86)\Java", @"C:\Program Files\Java" }) { if (!Directory.Exists(root)) { continue; } foreach (string directory in Directory .EnumerateDirectories(root, "jre1.8*") .OrderByDescending(path => path, StringComparer.OrdinalIgnoreCase)) { yield return Path.Combine(directory, "bin", "java.exe"); } foreach (string directory in Directory .EnumerateDirectories(root, "jdk1.8*") .OrderByDescending(path => path, StringComparer.OrdinalIgnoreCase)) { yield return Path.Combine(directory, "bin", "java.exe"); } } string? javaHome = Environment.GetEnvironmentVariable("JAVA_HOME"); if (!string.IsNullOrWhiteSpace(javaHome)) { yield return Path.Combine( javaHome.Trim(), "bin", "java.exe"); } string? jreHome = Environment.GetEnvironmentVariable("JRE_HOME"); if (!string.IsNullOrWhiteSpace(jreHome)) { yield return Path.Combine( jreHome.Trim(), "bin", "java.exe"); } yield return "java.exe"; } private static string? TryResolveExisting(string candidate) { try { string resolved = Path.IsPathRooted(candidate) ? Path.GetFullPath(candidate) : Path.GetFullPath( Path.Combine( AppContext.BaseDirectory, candidate)); return File.Exists(resolved) ? resolved : null; } catch { return null; } } }