diff --git a/v2rayN/ServiceLib/Common/Utils.cs b/v2rayN/ServiceLib/Common/Utils.cs index 7824ff4a..7a3fa9a0 100644 --- a/v2rayN/ServiceLib/Common/Utils.cs +++ b/v2rayN/ServiceLib/Common/Utils.cs @@ -1086,7 +1086,19 @@ public class Utils public static string GetExeName(string name) { - return IsWindows() ? $"{name}.exe" : name; + if (name.IsNullOrEmpty() || IsNonWindows()) + { + return name; + } + + if (name.EndsWith(".exe", StringComparison.OrdinalIgnoreCase)) + { + return name; + } + else + { + return $"{name}.exe"; + } } public static bool IsAdministrator() diff --git a/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxRoutingService.cs b/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxRoutingService.cs index cb4a2af1..0370ce29 100644 --- a/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxRoutingService.cs +++ b/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxRoutingService.cs @@ -277,7 +277,7 @@ public partial class CoreConfigSingboxService } } - if (_config.TunModeItem.EnableTun && item.Process?.Count > 0) + if (item.Process?.Count > 0) { var ruleProcName = JsonUtils.DeepCopy(rule3); ruleProcName.process_name ??= []; @@ -304,11 +304,7 @@ public partial class CoreConfigSingboxService } // sing-box strictly matches the exe suffix on Windows - var procName = process; - if (Utils.IsWindows() && !procName.EndsWith(".exe", StringComparison.OrdinalIgnoreCase)) - { - procName += ".exe"; - } + var procName = Utils.GetExeName(process); ruleProcName.process_name.Add(procName); } diff --git a/v2rayN/ServiceLib/Services/CoreConfig/V2ray/V2rayRoutingService.cs b/v2rayN/ServiceLib/Services/CoreConfig/V2ray/V2rayRoutingService.cs index 96984094..8691abb1 100644 --- a/v2rayN/ServiceLib/Services/CoreConfig/V2ray/V2rayRoutingService.cs +++ b/v2rayN/ServiceLib/Services/CoreConfig/V2ray/V2rayRoutingService.cs @@ -109,7 +109,7 @@ public partial class CoreConfigV2rayService v2rayConfig.routing.rules.Add(it); hasDomainIp = true; } - if (_config.TunModeItem.EnableTun && rule.process?.Count > 0) + if (rule.process?.Count > 0) { var it = JsonUtils.DeepCopy(rule); it.domain = null; diff --git a/v2rayN/ServiceLib/ViewModels/RoutingRuleSettingViewModel.cs b/v2rayN/ServiceLib/ViewModels/RoutingRuleSettingViewModel.cs index 71d42218..3baf79c6 100644 --- a/v2rayN/ServiceLib/ViewModels/RoutingRuleSettingViewModel.cs +++ b/v2rayN/ServiceLib/ViewModels/RoutingRuleSettingViewModel.cs @@ -106,7 +106,7 @@ public class RoutingRuleSettingViewModel : MyReactiveObject Network = item.Network, Protocols = Utils.List2String(item.Protocol), InboundTags = Utils.List2String(item.InboundTag), - Domains = Utils.List2String((item.Domain ?? []).Concat(item.Ip ?? []).ToList()), + Domains = Utils.List2String((item.Domain ?? []).Concat(item.Ip ?? []).ToList().Concat(item.Process ?? []).ToList()), Enabled = item.Enabled, Remarks = item.Remarks, }; diff --git a/v2rayN/v2rayN.Desktop/Views/RoutingRuleSettingWindow.axaml b/v2rayN/v2rayN.Desktop/Views/RoutingRuleSettingWindow.axaml index 7d00b3cc..a770b3ed 100644 --- a/v2rayN/v2rayN.Desktop/Views/RoutingRuleSettingWindow.axaml +++ b/v2rayN/v2rayN.Desktop/Views/RoutingRuleSettingWindow.axaml @@ -248,7 +248,7 @@ + Header="domain / ip / process" /> diff --git a/v2rayN/v2rayN/Views/RoutingRuleSettingWindow.xaml b/v2rayN/v2rayN/Views/RoutingRuleSettingWindow.xaml index c8e679a8..83238cb7 100644 --- a/v2rayN/v2rayN/Views/RoutingRuleSettingWindow.xaml +++ b/v2rayN/v2rayN/Views/RoutingRuleSettingWindow.xaml @@ -333,7 +333,7 @@ + Header="domain / ip / process" />