Beispiel #1
0
        private Architecture MapToArchitecture(ProcessorArchitecture processorArchitecture)
        {
            Architecture arch = Architecture.AnyCPU;

            // Mapping to Architecture based on https://msdn.microsoft.com/en-us/library/system.reflection.processorarchitecture(v=vs.110).aspx

            if (processorArchitecture.Equals(ProcessorArchitecture.Amd64) ||
                processorArchitecture.Equals(ProcessorArchitecture.IA64))
            {
                arch = Architecture.X64;
            }
            else if (processorArchitecture.Equals(ProcessorArchitecture.X86))
            {
                arch = Architecture.X86;
            }
            else if (processorArchitecture.Equals(ProcessorArchitecture.MSIL))
            {
                arch = Architecture.AnyCPU;
            }
            else if (processorArchitecture.Equals(ProcessorArchitecture.Arm))
            {
                arch = Architecture.ARM;
            }
            else
            {
                EqtTrace.Info("Unable to map to Architecture, using platform: {0}", arch);
            }

            return(arch);
        }
Beispiel #2
0
        public static void SetSource(dynamic p)
        {
            if (p == null)
            {
                throw new ArgumentNullException(nameof(p));
            }

            SourcePath = PathResolver.Build((string)p.Source);
            if (!SourcePath[SourcePath.Length - 1].Equals(System.IO.Path.DirectorySeparatorChar))
            {
                SourcePath += System.IO.Path.DirectorySeparatorChar;
            }
            SettingsFilePath = SourcePath + FilePath.Build("root", "settings.json");
            BasePath         = SourcePath;// + $"base{System.IO.Path.DirectorySeparatorChar}";
            RootPath         = BasePath + $"root{System.IO.Path.DirectorySeparatorChar}";
            ResourcePath     = BasePath + $"res{System.IO.Path.DirectorySeparatorChar}";
            FeatureSetPath   = p.FeaturesSet == null ? null : (string)p.FeaturesSet;
            Features         = new System.Collections.Generic.Dictionary <string, Feature>();
            if (FeatureSetPath != null)
            {
                ProcessorArchitecture arch = Assembly.GetExecutingAssembly().GetName().ProcessorArchitecture;
                if (arch == ProcessorArchitecture.MSIL)
                {
                    System.Runtime.InteropServices.Architecture osarch = System.Runtime.InteropServices.RuntimeInformation.OSArchitecture;
                    arch = osarch == System.Runtime.InteropServices.Architecture.Arm ? ProcessorArchitecture.Arm :
                           osarch == System.Runtime.InteropServices.Architecture.X64 ? ProcessorArchitecture.Amd64 :
                           osarch == System.Runtime.InteropServices.Architecture.X86 ? ProcessorArchitecture.X86 : ProcessorArchitecture.X86;
                }
                dynamic features = Newtonsoft.Json.JsonConvert.DeserializeObject(System.IO.File.ReadAllText(FeatureSetPath + "config.json"));
                foreach (dynamic feature in features)
                {
                    ProcessorArchitecture featureArch = GetArchitecture(((string)feature.Architecture).Trim(), arch);
                    if (!arch.Equals(featureArch))
                    {
                        if (arch == ProcessorArchitecture.Amd64 && featureArch == ProcessorArchitecture.X86)
                        {
                            ;
                        }
                        else if ((arch == ProcessorArchitecture.Amd64 || arch == ProcessorArchitecture.X86) && Environment.Is64BitProcess)
                        {
                            ;
                        }
                        else
                        {
                            ErrorLogger.Warn("[Settings] : Feature '" + (string)feature.Name + "' Unknown architecture '" + arch + "', feature dropped >> " + featureArch.ToString());
                            continue;
                        }
                    }


                    Feature f = new()
                    {
                        Name = (string)feature.Name,
                        Path = FeatureSetPath + (string)feature.Name + System.IO.Path.DirectorySeparatorChar + (
                            featureArch == ProcessorArchitecture.Amd64 ? "x64" + System.IO.Path.DirectorySeparatorChar :
                            featureArch == ProcessorArchitecture.X86 ? "x86" + System.IO.Path.DirectorySeparatorChar :
                            featureArch == ProcessorArchitecture.Arm ? "arm" + System.IO.Path.DirectorySeparatorChar : null
                            ),
                        TargetName           = (string)feature.Target,
                        RequireServerIOFocus = (bool)feature.RequireServerIOFocus,
                        WaitForExit          = (bool)feature.WaitForExit
                    };

                    f.TargetExcutable = f.Path + f.TargetName;

                    if (!System.IO.File.Exists(f.TargetExcutable) || f.Path == null)
                    {
                        ErrorLogger.Warn("[Settings] : Feature '" + (string)feature.Name + "' Target file not found, won't be available");
                        continue;
                    }
                    if (!(bool)feature.Enabled)
                    {
                        continue;
                    }
                    if (Features.ContainsKey(f.Name))
                    {
                        ErrorLogger.Warn("[Settings] : Feature '" + (string)feature.Name + "' already defined. duplicates ignored");
                        continue;
                    }

                    Features.Add(f.Name, f);
                }

                if (!Features.ContainsKey("cpython"))
                {
                    throw new Exception("Cannot initialize feature-set without cpython");
                }
            }
        }