protected override IEnumerable <string> GetAllAvailableAndroidNdks() { var preferedNdkPath = PreferedAndroidNdkPath; if (!string.IsNullOrEmpty(preferedNdkPath)) { yield return(preferedNdkPath); } // Look in PATH foreach (var ndkStack in ProcessUtils.FindExecutablesInPath(NdkStack)) { var ndkDir = Path.GetDirectoryName(ndkStack); if (ValidateAndroidNdkLocation(ndkDir)) { yield return(ndkDir); } } }
static string GetExecutablePath(string?dir, string exe) { if (string.IsNullOrEmpty(dir)) { return(exe); } foreach (var e in ProcessUtils.ExecutableFiles(exe)) { try { if (File.Exists(Path.Combine(dir, e))) { return(e); } } catch (ArgumentException) { continue; } } return(exe); }
void FixOwnership(List <string>?paths) { if (!need_chown || paths == null || paths.Count == 0) { return; } var stdout = new StringWriter(); var stderr = new StringWriter(); var args = new List <string> { QuoteString(sudo_user !) }; foreach (string p in paths) { args.Add(QuoteString(p)); } var psi = new ProcessStartInfo(OS.IsMac ? "/usr/sbin/chown" : "/bin/chown") { CreateNoWindow = true, Arguments = String.Join(" ", args), }; Logger(TraceLevel.Verbose, $"Changing filesystem object ownership: {psi.FileName} {psi.Arguments}"); Task <int> chown_task = ProcessUtils.StartProcess(psi, stdout, stderr, System.Threading.CancellationToken.None); if (chown_task.Result != 0) { Logger(TraceLevel.Warning, $"Failed to change ownership of filesystem object(s)"); Logger(TraceLevel.Verbose, $"standard output: {stdout}"); Logger(TraceLevel.Verbose, $"standard error: {stderr}"); } string QuoteString(string p) { return($"\"{p}\""); } } }
static IEnumerable <string> GetLibexecJdkPaths(Action <TraceLevel, string> logger) { var java_home = Path.GetFullPath("/usr/libexec/java_home"); if (!File.Exists(java_home)) { yield break; } var jhp = new ProcessStartInfo { FileName = java_home, Arguments = "-X", }; var xml = new StringBuilder(); ProcessUtils.Exec(jhp, (o, e) => { if (string.IsNullOrEmpty(e.Data)) { return; } xml.Append(e.Data); }, includeStderr: false); var plist = XElement.Parse(xml.ToString()); foreach (var info in plist.Elements("array").Elements("dict")) { var JVMHomePath = (XNode)info.Elements("key").FirstOrDefault(e => e.Value == "JVMHomePath"); if (JVMHomePath == null) { continue; } while (JVMHomePath.NextNode.NodeType != XmlNodeType.Element) { JVMHomePath = JVMHomePath.NextNode; } var strElement = (XElement)JVMHomePath.NextNode; var path = strElement.Value; yield return(path); } }
private static bool CheckRegistryKeyForExecutable(UIntPtr key, string subkey, string valueName, RegistryEx.Wow64 wow64, string subdir, string exe) { try { string key_name = string.Format(@"{0}\{1}\{2}", key == RegistryEx.CurrentUser ? "HKCU" : "HKLM", subkey, valueName); var path = NullIfEmpty(RegistryEx.GetValueString(key, subkey, valueName, wow64)); if (path == null) { return(false); } if (!ProcessUtils.FindExecutablesInDirectory(Path.Combine(path, subdir), exe).Any()) { return(false); } return(true); } catch (Exception) { return(false); } }
protected virtual IEnumerable <string> GetAllAvailableAndroidNdks() { // Look in PATH foreach (var ndkStack in ProcessUtils.FindExecutablesInPath(NdkStack)) { var ndkDir = Path.GetDirectoryName(ndkStack); if (ndkDir == null) { continue; } yield return(ndkDir); } // Check for the "ndk-bundle" directory inside other SDK directories foreach (var sdk in GetAllAvailableAndroidSdks()) { if (sdk == AndroidSdkPath) { continue; } yield return(Path.Combine(sdk, "ndk-bundle")); } }
Dictionary <string, List <string> > GetJavaProperties() { return(GetJavaProperties(ProcessUtils.FindExecutablesInDirectory(Path.Combine(HomePath, "bin"), "java").First())); }