Initial commit to new repository
This commit is contained in:
90
.decompiledproj/AxCopilot/Services/RuntimeDetector.cs
Normal file
90
.decompiledproj/AxCopilot/Services/RuntimeDetector.cs
Normal file
@@ -0,0 +1,90 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace AxCopilot.Services;
|
||||
|
||||
public static class RuntimeDetector
|
||||
{
|
||||
private static Dictionary<string, bool>? _cache;
|
||||
|
||||
private static DateTime _cacheTime;
|
||||
|
||||
private static readonly TimeSpan CacheTtl = TimeSpan.FromMinutes(5.0);
|
||||
|
||||
public static bool IsAvailable(string runtime)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(runtime))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
runtime = runtime.Trim().ToLowerInvariant();
|
||||
if (_cache != null && DateTime.UtcNow - _cacheTime < CacheTtl)
|
||||
{
|
||||
if (_cache.TryGetValue(runtime, out var value))
|
||||
{
|
||||
return value;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_cache = new Dictionary<string, bool>(StringComparer.OrdinalIgnoreCase);
|
||||
_cacheTime = DateTime.UtcNow;
|
||||
}
|
||||
bool flag = DetectRuntime(runtime);
|
||||
_cache[runtime] = flag;
|
||||
return flag;
|
||||
}
|
||||
|
||||
public static void ClearCache()
|
||||
{
|
||||
_cache = null;
|
||||
}
|
||||
|
||||
private static bool DetectRuntime(string runtime)
|
||||
{
|
||||
string value = RunQuick("where.exe", runtime);
|
||||
if (string.IsNullOrEmpty(value))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (1 == 0)
|
||||
{
|
||||
}
|
||||
string text = ((!(runtime == "java")) ? "--version" : "-version");
|
||||
if (1 == 0)
|
||||
{
|
||||
}
|
||||
string args = text;
|
||||
string value2 = RunQuick(runtime, args);
|
||||
return !string.IsNullOrEmpty(value2);
|
||||
}
|
||||
|
||||
private static string? RunQuick(string exe, string args)
|
||||
{
|
||||
try
|
||||
{
|
||||
ProcessStartInfo startInfo = new ProcessStartInfo(exe, args)
|
||||
{
|
||||
RedirectStandardOutput = true,
|
||||
RedirectStandardError = true,
|
||||
UseShellExecute = false,
|
||||
CreateNoWindow = true
|
||||
};
|
||||
using Process process = Process.Start(startInfo);
|
||||
if (process == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
string text = process.StandardOutput.ReadToEnd();
|
||||
string text2 = process.StandardError.ReadToEnd();
|
||||
process.WaitForExit(5000);
|
||||
string text3 = (string.IsNullOrWhiteSpace(text) ? text2 : text);
|
||||
return string.IsNullOrWhiteSpace(text3) ? null : text3.Trim();
|
||||
}
|
||||
catch
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user