예제 #1
0
        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);
        }
예제 #2
0
 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);
         }
     }
 }
예제 #3
0
 /// <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;
                 }
             }
         }
     }
 }
예제 #4
0
 /// <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;
 }