132 lines
3.6 KiB
C#
132 lines
3.6 KiB
C#
namespace ZA.CoreService.ESBCertificateManager.Services;
|
|
|
|
/// <summary>
|
|
/// Findet eine nutzbare Java-8-Runtime für Sonic MfApi.
|
|
/// </summary>
|
|
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<string?> EnumerateCandidates(
|
|
string? configuredPath)
|
|
{
|
|
if (!string.IsNullOrWhiteSpace(configuredPath))
|
|
{
|
|
yield return configuredPath.Trim();
|
|
}
|
|
|
|
// Relativ zum App-Output (bin\Debug\...\Runtime\bin\java.exe)
|
|
yield return Path.Combine(
|
|
AppContext.BaseDirectory,
|
|
"Runtime",
|
|
"bin",
|
|
"java.exe");
|
|
|
|
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 (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;
|
|
}
|
|
}
|
|
}
|