public static RunTimeRequirements GetRunTimeRequirements(string exe, string args) { object o = new object(); Monitor.Enter(o); var process = new Process { StartInfo = new ProcessStartInfo { FileName = exe, Arguments = args + " -requirements", UseShellExecute = false, RedirectStandardOutput = true, CreateNoWindow = true } }; string processOutput = ""; process.Start(); while (!process.StandardOutput.EndOfStream) { processOutput += process.StandardOutput.ReadLine(); } //Parse the output RunTimeRequirements runTimeRequirements = null; if (processOutput == "") { return(null); //something went wrong, possibly the experiment cannot be run with this AppVersion } int startPos = processOutput.IndexOf("<" + XmlTags.Requirements + ">"); int endPos = processOutput.IndexOf("</" + XmlTags.Requirements + ">"); if (startPos >= 0 && endPos > 0) { string xml = processOutput.Substring(startPos, endPos - startPos + ("</" + XmlTags.Requirements + ">").Length); XmlDocument doc = new XmlDocument(); doc.LoadXml(xml); runTimeRequirements = new RunTimeRequirements(doc.FirstChild); } Monitor.Exit(o); return(runTimeRequirements); }
public void GetRuntimeRequirements(AppVersion selectedVersion, List <AppVersion> appVersions) { //Added for testing purposes: this avoids using real experiments if (RunTimeReqs == null) { //We can only get the runtime requirements of an app compatible with the current architecture if (IsHostArchitectureCompatible(selectedVersion)) { RunTimeReqs = GetRunTimeRequirements(selectedVersion.ExeFile, ExperimentFileName); } else { AppVersion compatibleVersion = BestHostArchitectureMatch(appVersions); RunTimeReqs = GetRunTimeRequirements(compatibleVersion.ExeFile, ExperimentFileName); } } }
/// <summary> /// Executes the app to retrive the runtime requirements /// </summary> public void RequestRuntimeRequirements() { //Added for testing purposes: this avoids using real experiments if (RunTimeReqs == null) { foreach (AppVersion appVersion in AppVersions) { if (IsHostArchitectureCompatible(appVersion)) { RunTimeReqs = GetRunTimeRequirements(appVersion.ExeFile, ExperimentFileName); if (RunTimeReqs != null) { break; } } } } }
/// <summary> /// Minimal constructor for testing /// </summary> /// <param name="name"></param> public ExperimentalUnit(string name, List <AppVersion> appVersions, RunTimeRequirements runTimeRequirements) { Name = name; AppVersions = appVersions; RunTimeReqs = runTimeRequirements; }