/// <summary>
        /// Create MA monitor
        /// </summary>
        private MessageAnalyzerMonitor(List <string> GroupList = null, bool isMAInstalled = false)
        {
            this.isMAInstalled = isMAInstalled;

            ConfigureEnvironment();
            opnlist = new List <string>();
            IMonitorSettings monitorSettings = MonitorFactory.CreateDefaultSettings();

            string modelpath = null;

            if (isMAInstalled)
            {
                LiveTraceSession.EnsurePowerShellInitiation();
                // If MMA installed, use OPNs under local app data, same as MMA UI, otherwise it will re-generate the CompilationCache if using MMA UI simutaneously.
                monitorSettings.Host = CreateHostForMAInstalled();
                string OPNAndConfigurationPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Microsoft", "MessageAnalyzer", "OPNAndConfiguration");
                modelpath = Path.Combine(OPNAndConfigurationPath, "Opns"); //OpnAndConfiguration\Opns\ in local app data
            }
            else
            {
                monitorSettings.Host = CreateHost();
                modelpath            = PlatformManager.ModelsDirectory;                         // PlatformManager.ModelsDirectory is: "OpnAndConfiguration\Opns\"
                string opnForEtw = Path.Combine(Path.GetDirectoryName(modelpath), "OpnForEtw"); // OpnAndConfiguration\OpnForEtw
                monitorSettings.ModelLoadPath.Add(opnForEtw);
            }

            if (GroupList == null)
            {
                monitorSettings.ModelLoadPath.Add(modelpath);
                opnlist.Add(modelpath);
            }
            else
            {
                modelpath = Path.GetDirectoryName((PlatformManager.ModelsDirectory)); // modelpath is set to the path of folder "OpnAndConfiguration"
                GroupList.ForEach(e => monitorSettings.ModelLoadPath.Add(modelpath + "\\" + e));
                GroupList.ForEach(e => opnlist.Add(modelpath + "\\" + e));
            }
            monitorSettings.ExtensionLoadPath.Add(PlatformManager.ExtensionsDirectory);
            monitor = MonitorFactory.CreateLocalMonitor(monitorSettings);
            monitor.Initialize();

            ModelCatalog.WaitForInitialization();

            monitor.CatchExceptionOnGetMessageData = true;
        }
        /// <summary>
        /// Create Live Capture
        /// </summary>
        /// <param name="providerList">ETW Provider list</param>
        /// <returns></returns>
        public LiveTraceSession CreateLiveTraceSession(IList <string> providerList = null)
        {
            LiveTraceSession liveCapture = new LiveTraceSession(providerList);

            return(liveCapture);
        }