diff --git a/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigSingboxService.cs b/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigSingboxService.cs index 18bebed4..bc66a767 100644 --- a/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigSingboxService.cs +++ b/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigSingboxService.cs @@ -1048,28 +1048,33 @@ public class CoreConfigSingboxService private void GenRoutingDirectExe(out List lstDnsExe, out List lstDirectExe) { - lstDnsExe = new(); - lstDirectExe = new(); - var coreInfo = CoreInfoHandler.Instance.GetCoreInfo(); - foreach (var it in coreInfo) + var dnsExeSet = new HashSet(StringComparer.OrdinalIgnoreCase); + var directExeSet = new HashSet(StringComparer.OrdinalIgnoreCase); + + var coreInfoResult = CoreInfoHandler.Instance.GetCoreInfo(); + var fileSuffix = Utils.IsWindows() ? ".exe" : ""; + + foreach (var coreConfig in coreInfoResult) { - if (it.CoreType == ECoreType.v2rayN) + if (coreConfig.CoreType == ECoreType.v2rayN) { continue; } - foreach (var it2 in it.CoreExes) - { - if (!lstDnsExe.Contains(it2) && it.CoreType != ECoreType.sing_box) - { - lstDnsExe.Add($"{it2}.exe"); - } - if (!lstDirectExe.Contains(it2)) + foreach (var baseExeName in coreConfig.CoreExes) + { + var executableName = $"{baseExeName}{fileSuffix}"; + + if (coreConfig.CoreType != ECoreType.sing_box) { - lstDirectExe.Add($"{it2}.exe"); + dnsExeSet.Add(executableName); } + directExeSet.Add(executableName); } } + + lstDnsExe = new List(dnsExeSet); + lstDirectExe = new List(directExeSet); } private async Task GenRoutingUserRule(RulesItem item, List rules)