14 IEnumerable<string> explicitExecutableEnvironmentVariables,
15 IEnumerable<string> homeEnvironmentVariables,
16 IEnumerable<string> relativeExecutablePaths,
17 IEnumerable<string> pathExecutableNames,
18 IEnumerable<string>? directCandidates =
null)
20 ArgumentNullException.ThrowIfNull(
21 explicitExecutableEnvironmentVariables);
22 ArgumentNullException.ThrowIfNull(homeEnvironmentVariables);
23 ArgumentNullException.ThrowIfNull(relativeExecutablePaths);
24 ArgumentNullException.ThrowIfNull(pathExecutableNames);
26 foreach (
string variableName
in
27 explicitExecutableEnvironmentVariables)
29 if (
string.IsNullOrWhiteSpace(variableName))
35 Environment.GetEnvironmentVariable(
36 variableName)?.Trim() ??
40 NormalizeExistingFile(configured);
42 if (!
string.IsNullOrEmpty(existing))
48 string[] relativePaths =
49 relativeExecutablePaths
51 !
string.IsNullOrWhiteSpace(path))
54 foreach (
string variableName
in homeEnvironmentVariables)
56 if (
string.IsNullOrWhiteSpace(variableName))
62 Environment.GetEnvironmentVariable(
63 variableName)?.Trim() ??
66 if (
string.IsNullOrWhiteSpace(home))
71 foreach (
string relativePath
in relativePaths)
74 NormalizeExistingFile(
75 Path.Combine(home, relativePath));
77 if (!
string.IsNullOrEmpty(existing))
84 if (directCandidates is not
null)
86 foreach (
string candidate
in directCandidates)
89 NormalizeExistingFile(candidate);
91 if (!
string.IsNullOrEmpty(existing))
105 IEnumerable<string> executableNames)
107 ArgumentNullException.ThrowIfNull(executableNames);
110 Environment.GetEnvironmentVariable(
"PATH") ??
113 string[] directories =
116 StringSplitOptions.RemoveEmptyEntries |
117 StringSplitOptions.TrimEntries);
119 foreach (
string directory
in directories)
121 foreach (
string executableName
in executableNames)
123 if (
string.IsNullOrWhiteSpace(executableName))
131 NormalizeExistingFile(
134 executableName.Trim()));
136 if (!
string.IsNullOrEmpty(existing))