Example #1
0
        /// <summary>
        /// Load the config file, apply any cmd line params to the config file param state, initialize the logging subsystem, load the database
        /// </summary>
        /// <returns></returns>
        public bool LoadConfiguration()
        {
            new NC("INCC6 GUI");

            // check return bool and exit here on error
            string[] fullargs = Environment.GetCommandLineArgs();
            string[] args     = new string[fullargs.Length - 1];
            Array.Copy(fullargs, 1, args, 0, args.Length);

            NCCConfig.Config c = new NCCConfig.Config(); // gets DB params
            if (!NC.App.LoadPersistenceConfig(c.DB))     // loads up DB, sets global AppContext
            {
                return(false);
            }
            c.AfterDBSetup(NC.App.AppContext, args);  // apply the cmd line
            bool initialized = NC.App.Initialize(c);

            if (!initialized)
            {
                return(false);
            }

            NC.App.Logger(LMLoggers.AppSection.App).
            TraceInformation("==== Starting " + DateTime.Now.ToString("MMM dd yyy HH:mm:ss.ff K") + " " + NC.App.Name + " " + NC.App.Config.VersionString);
            NC.App.Logger(LMLoggers.AppSection.App).
            TraceInformation("==== DB " + NC.App.Pest.DBDescStr);
            return(true);
        }
Example #2
0
            public LognLM(string section, NCCConfig.Config cfg, int pid)
            {
                FileLogTraceListener listener = null;

                ts = new TraceSource(section);

                try
                {
                    foreach (TraceListener item in ts.Listeners)
                    {
                        // every file logger points to the same file and has the same attributes, they are really a merged logger set (for now, until we need something else)
                        if (item is FileLogTraceListener)
                        {
                            listener = (FileLogTraceListener)item;
                            listener.BaseFileName = String.Format("NCC6[{0,4}]", pid); // add thread id here
                            listener.Append       = true;
                            listener.AutoFlush    = false;                             // dev note: expose a setter for this property, to set true for critical passages
                            if (!NCCConfig.Config.isDefaultPath(cfg.App.RootLoc))
                            {
                                listener.Location       = LogFileLocation.Custom;
                                listener.CustomLocation = cfg.App.LogFilePath;
                            }
                            listener.MaxFileSize = cfg.App.RolloverSizeMB * 1024 * 1024;
                            // logdetails cmd line flag crudely enables this option set, only because the App.Config sharedListeners and switch source sections do not permit setting this attribute.
                            if (cfg.App.isSet(NCCConfig.NCCFlags.logDetails))
                            {
                                item.TraceOutputOptions |= cfg.App.LoggingDetailOptions;
                            }

                            if (string.IsNullOrEmpty(CurrentLogFilePath))
                            {
                                CurrentLogFilePath = listener.FullLogFileName; //System.IO.Path.Combine(listener.CustomLocation, listener.BaseFileName + DateTime.Now.ToString("yyyy-MM-dd") + ".log");
                            }
                        }
                        else
                        {
                            // item.TraceOutputOptions |= (TraceOptions.DateTime | TraceOptions.ThreadId);
                        }
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }

                if (cfg.App.IsLevelSet())  // use the cmd line or UI override, if one is present,
                {
                    // test: but if the internal switch value was higher as set in app.config, this assignment is either overridden later or has no effect on the pre-constructed switches
                    if (ts != null)
                    {
                        ts.Switch.Level = cfg.App.Level();
                    }
                }
            }
Example #3
0
        public LMLoggers(NCCConfig.Config cfg)
        {
            this.cfg = cfg;
            reps = new Hashtable((int)AppSection.Rarrr);
            int pid = Process.GetCurrentProcess().Id;

            foreach (AppSection wp in Enum.GetValues(typeof(AppSection)))
            {
                LognLM l = new LognLM(wp.ToString(), cfg, pid);
                reps.Add(wp, l);
             }
        }
Example #4
0
        public LMLoggers(NCCConfig.Config cfg)
        {
            this.cfg = cfg;
            reps     = new Hashtable((int)AppSection.Rarrr);
            int pid = Process.GetCurrentProcess().Id;

            foreach (AppSection wp in Enum.GetValues(typeof(AppSection)))
            {
                LognLM l = new LognLM(wp.ToString(), cfg, pid);
                reps.Add(wp, l);
            }
        }
Example #5
0
        /// <summary>
        /// Load the config file, apply any cmd line params to the config file param state, initialize the logging subsystem, load the database
        /// </summary>
        /// <returns></returns>
        public bool LoadConfiguration()
        {
            new NC("INCC6 GUI");

            // check return bool and exit here on error
            string[] fullargs = Environment.GetCommandLineArgs();
            string[] args = new string[fullargs.Length - 1];
            Array.Copy(fullargs, 1, args, 0, args.Length);

            NCCConfig.Config c = new NCCConfig.Config(); // gets DB params
            if (!NC.App.LoadPersistenceConfig(c.DB)) // loads up DB, sets global AppContext
                return false;
            c.AfterDBSetup(NC.App.AppContext, args);  // apply the cmd line
            bool initialized = NC.App.Initialize(c);
            if (!initialized)
                return false;

            NC.App.Logger(LMLoggers.AppSection.App).
                TraceInformation("==== Starting " + DateTime.Now.ToString("MMM dd yyy HH:mm:ss.ff K") + " " + NC.App.Name + " " + NC.App.Config.VersionString);
            NC.App.Logger(LMLoggers.AppSection.App).
                TraceInformation("==== DB " + NC.App.Pest.DBDescStr);
            return true;
        }
Example #6
0
        static void Main(string[] args)
        {
            new N("INCC6 Console");
            System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture;
            NCCConfig.Config c = new NCCConfig.Config(); // gets DB params
            if (!N.App.LoadPersistenceConfig(c.DB)) // loads up DB, sets global AppContext
                return;
            c.AfterDBSetup(N.App.AppContext, args);  // apply the cmd line
            string[] possiblepaths = NCCFile.FileCtrl.ProcessINCC5IniFile(N.App.Logger(LMLoggers.AppSection.Control)); // iRap: optional use of INCC5 ini file to find results and output paths
            if (possiblepaths.Length > 2)  // use the iRAP defined input, results and log file paths
            {
                N.App.AppContext.FileInput = possiblepaths[0];
                if (System.IO.Directory.Exists(possiblepaths[1]))
                    N.App.AppContext.ResultsFilePath = possiblepaths[1];
                if (System.IO.Directory.Exists(possiblepaths[2]))
                    N.App.AppContext.LogFilePath = possiblepaths[2];
            }
            // check return bool and exit here on error
            bool initialized = N.App.Initialize(c);
            if (!initialized)
                return;

            if (N.App.Config.Cmd.ShowVersion && !N.App.Config.Cmd.Showcfg)
            {
                N.App.Config.Cmd.ShowVersionOnConsole(N.App.Config, N.App.Config.App.Verbose() == TraceEventType.Verbose);
                return;
            }
            else if (N.App.Config.Cmd.Showhelp)
            {
                N.App.Config.ShowHelp();
                return;
            }
            else if (N.App.Config.Cmd.Showcfg)
            {
                NCCConfig.Config.ShowCfg(N.App.Config, N.App.Config.App.Verbose() == TraceEventType.Verbose);
                return;
            }

            LMLoggers.LognLM applog = N.App.Logger(LMLoggers.AppSection.App);
            bool OpenResults = N.App.AppContext.OpenResults;
            try
            {
                applog.TraceInformation("==== Starting " + DateTime.Now.ToString("MMM dd yyy HH:mm:ss.ff K") + " [Cmd] " + N.App.Name + " " + N.App.Config.VersionString);
                applog.TraceInformation("==== DB " + N.App.Pest.DBDescStr);
                // These affect the current acquire state, so they occur here and not earlier in the inital processing sequence
                if (!string.IsNullOrEmpty(c.Cur.Detector) && !c.Cur.Detector.Equals("Default")) // command line set the value
                    initialized = Integ.SetNewCurrentDetector(c.Cur.Detector, true);
                if (!initialized)
                    goto end;

                if (!string.IsNullOrEmpty(c.Cur.Material) && !c.Cur.Material.Equals("Pu")) // command line set the value
                    initialized = Integ.SetNewCurrentMaterial(c.Cur.Material, true);
                if (!initialized)
                    goto end;

                if (!string.IsNullOrEmpty(c.Cur.ItemId)) // command line set the item value, use it to override the material and other acquire params
                    initialized = Integ.SetNewCurrentMaterial(c.Cur.Material, true);
                if (!initialized)
                    goto end;

                if (!N.App.AppContext.ReportSectional.Equals(NCCConfig.Config.DefaultReportSectional)) // command line set the value
                {
                    AcquireParameters acq = null;
                    Detector det = null;
                    Integ.GetCurrentAcquireDetectorPair(ref acq, ref det);
                    acq.review.Scan(N.App.AppContext.ReportSectional);
                    acq.MeasDateTime = DateTime.Now;
                    N.App.DB.UpdateAcquireParams(acq, det.ListMode);
                    N.App.Logger(LMLoggers.AppSection.Control).TraceEvent(LogLevels.Info, 32444, "The current report sections are now " + N.App.AppContext.ReportSectional);
                }
                if (N.App.Config.App.UsingFileInput || N.App.Opstate.Action == NCC.NCCAction.File)
                {
                    if (N.App.AppContext.AssayFromFiles)
                        N.App.Opstate.Action = NCC.NCCAction.Assay;
                    else if (N.App.AppContext.HasFileAction)
                        N.App.Opstate.Action = NCC.NCCAction.File;
                }

                if (N.App.Config.Cmd.Query != null)
                {
                    AcquireParameters acq = Integ.GetCurrentAcquireParams();
                    System.Collections.Generic.List<string> ls = acq.ToDBElementList(generate:true).AlignedNameValueList;
                    foreach(string s in ls)
                        Console.WriteLine(s);
                    OpenResults = false;
                    if (N.App.Opstate.Action == NCC.NCCAction.Nothing)
                        return;
                }

                if (N.App.Config.App.UsingFileInput || N.App.Opstate.Action == NCC.NCCAction.File)
                {
                    BuildMeasurement();
                    if (N.App.AppContext.AssayFromFiles)
                        N.App.Opstate.Action = NCC.NCCAction.Assay;
                    else if (N.App.AppContext.HasFileAction)
                        N.App.Opstate.Action = NCC.NCCAction.File;

                    // file processing for analysis and more
                    FileControlBind filecontrol = new FileControlBind();
                    filecontrol.SetupEventHandlers();
                    filecontrol.StartAction();  // step into the code and run
                    N.App.Opstate.SOH = NCC.OperatingState.Stopped;
                }
                else
                {
                    BuildMeasurement();
                    DAQControlBind control = new DAQControlBind();
                    DAQ.DAQControl.ActivateDetector(N.App.Opstate.Measurement.Detector);
                    control.SetupEventHandlers();
                    control.StartAction();
                    N.App.Opstate.SOH = NCC.OperatingState.Stopped;
                }
                end:
                ;
            } catch (Exception e)
            {
                N.App.Opstate.SOH = NCC.OperatingState.Trouble;
                applog.TraceException(e, true);
                applog.EmitFatalErrorMsg();
            } finally
            {
                N.App.Opstate.SOH = NCC.OperatingState.Stopped;
                N.App.Config.RetainChanges();
                applog.TraceInformation("==== Exiting " + DateTime.Now.ToString("MMM dd yyy HH:mm:ss.ff K") + " [Cmd] " + N.App.Name + " . . .");
                N.App.Loggers.Flush();
                if (OpenResults) Process.Start(System.IO.Path.Combine(Environment.SystemDirectory, "notepad.exe"), LMLoggers.LognLM.CurrentLogFilePath);
            }
        }
Example #7
0
        static void Main(string[] args)
        {
            new NC("INCC6 Console");

            NCCConfig.Config c = new NCCConfig.Config(); // gets DB params
            NC.App.LoadPersistenceConfig(c.DB); // loads up DB, sets global AppContext
            c.AfterDBSetup(NC.App.AppContext, args);  // apply the cmd line 
            bool initialized = NC.App.Initialize(c);
            // check return bool and exit here on error
            if (!initialized)
                return;

            if (NC.App.Config.Cmd.ShowVersion && !NC.App.Config.Cmd.Showcfg)
            {
                NC.App.Config.Cmd.ShowVersionOnConsole(NC.App.Config, NC.App.Config.App.Verbose() == TraceEventType.Verbose);
                return;
            }
            else if (NC.App.Config.Cmd.Showhelp)
            {
                NC.App.Config.ShowHelp();
                return;
            }
            else if (NC.App.Config.Cmd.Showcfg)
            {
                NCCConfig.Config.ShowCfg(NC.App.Config, NC.App.Config.App.Verbose() == TraceEventType.Verbose);
                return;
            }

            LMLoggers.LognLM applog = NC.App.Logger(LMLoggers.AppSection.App);

            applog.TraceInformation("==== Starting " + DateTime.Now.ToString("MMM dd yyy HH:mm:ss.ff K") + " [Cmd] " + NC.App.Name + " " + NC.App.Config.VersionString);
            // TODO: log DB details at startup too 
            try
            {
                BuildMeasurement();
                if (NC.App.Config.App.UsingFileInput)
                {
                    if (NC.App.AppContext.AssayFromFiles)
                        NC.App.Opstate.Action = NCC.NCCAction.Assay;
                    else
                        NC.App.Opstate.Action = NCC.NCCAction.File;

                    // file processing for analysis and more
                    FileControlBind filecontrol = new FileControlBind();

                    filecontrol.SetupEventHandlers();

                    filecontrol.StartAction();  // step into the code and Run run run!

                    NC.App.Opstate.SOH = NCC.OperatingState.Stopped;
                }
                else
                {
                    // NEXT: one of Assay, HV or Discover NC.App.Opstate.Action = NCC.NCCAction.;
                    // DAQ + prompt
                    DAQControlBind daqcontrol = new DAQControlBind((MLMEmulation.IEmulatorDiversion)(new LMProcessor.NullEmulation())); //<- here

                    daqcontrol.SetupTimerCallBacks();
                    daqcontrol.SetupEventHandlers();

                    DAQControlBind.ActivateDetector(NC.App.Opstate.Measurement.Detectors[0]);

                    daqcontrol.StartAction(); // step into the code and Run run run!

                    NC.App.Opstate.SOH = NCC.OperatingState.Stopped;
                }
            }
            catch (Exception e)
            {
                NC.App.Opstate.SOH = NCC.OperatingState.Trouble;
                applog.TraceException(e, true);
                applog.EmitFatalErrorMsg();
            }
            finally
            {
                NC.App.Opstate.SOH = NCC.OperatingState.Stopped;
                NC.App.Config.RetainChanges();
                applog.TraceInformation("==== Exiting " + DateTime.Now.ToString("MMM dd yyy HH:mm:ss.ff K") + " [Cmd] " + NC.App.Name + " . . .");
                NC.App.Loggers.Flush();
            }
        }
Example #8
0
        static void Main(string[] args)
        {
            new NC("INCC6 Console");

            NCCConfig.Config c = new NCCConfig.Config(); // gets DB params
            NC.App.LoadPersistenceConfig(c.DB);          // loads up DB, sets global AppContext
            c.AfterDBSetup(NC.App.AppContext, args);     // apply the cmd line
            bool initialized = NC.App.Initialize(c);

            // check return bool and exit here on error
            if (!initialized)
            {
                return;
            }

            if (NC.App.Config.Cmd.ShowVersion && !NC.App.Config.Cmd.Showcfg)
            {
                NC.App.Config.Cmd.ShowVersionOnConsole(NC.App.Config, NC.App.Config.App.Verbose() == TraceEventType.Verbose);
                return;
            }
            else if (NC.App.Config.Cmd.Showhelp)
            {
                NC.App.Config.ShowHelp();
                return;
            }
            else if (NC.App.Config.Cmd.Showcfg)
            {
                NCCConfig.Config.ShowCfg(NC.App.Config, NC.App.Config.App.Verbose() == TraceEventType.Verbose);
                return;
            }

            LMLoggers.LognLM applog = NC.App.Logger(LMLoggers.AppSection.App);

            applog.TraceInformation("==== Starting " + DateTime.Now.ToString("MMM dd yyy HH:mm:ss.ff K") + " [Cmd] " + NC.App.Name + " " + NC.App.Config.VersionString);
            // TODO: log DB details at startup too
            try
            {
                BuildMeasurement();
                if (NC.App.Config.App.UsingFileInput)
                {
                    if (NC.App.AppContext.AssayFromFiles)
                    {
                        NC.App.Opstate.Action = NCC.NCCAction.Assay;
                    }
                    else
                    {
                        NC.App.Opstate.Action = NCC.NCCAction.File;
                    }

                    // file processing for analysis and more
                    FileControlBind filecontrol = new FileControlBind();

                    filecontrol.SetupEventHandlers();

                    filecontrol.StartAction();  // step into the code and Run run run!

                    NC.App.Opstate.SOH = NCC.OperatingState.Stopped;
                }
                else
                {
                    // NEXT: one of Assay, HV or Discover NC.App.Opstate.Action = NCC.NCCAction.;
                    // DAQ + prompt
                    DAQControlBind daqcontrol = new DAQControlBind((MLMEmulation.IEmulatorDiversion)(new LMProcessor.NullEmulation())); //<- here

                    daqcontrol.SetupTimerCallBacks();
                    daqcontrol.SetupEventHandlers();

                    DAQControlBind.ActivateDetector(NC.App.Opstate.Measurement.Detectors[0]);

                    daqcontrol.StartAction(); // step into the code and Run run run!

                    NC.App.Opstate.SOH = NCC.OperatingState.Stopped;
                }
            }
            catch (Exception e)
            {
                NC.App.Opstate.SOH = NCC.OperatingState.Trouble;
                applog.TraceException(e, true);
                applog.EmitFatalErrorMsg();
            }
            finally
            {
                NC.App.Opstate.SOH = NCC.OperatingState.Stopped;
                NC.App.Config.RetainChanges();
                applog.TraceInformation("==== Exiting " + DateTime.Now.ToString("MMM dd yyy HH:mm:ss.ff K") + " [Cmd] " + NC.App.Name + " . . .");
                NC.App.Loggers.Flush();
            }
        }
Example #9
0
File: Cmd.cs Project: radtek/INCC6
        static void Main(string[] args)
        {
            new N("INCC6 Console");
            System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture;
            NCCConfig.Config c = new NCCConfig.Config();        // gets DB params
            if (!N.App.LoadPersistenceConfig(c.DB))             // loads up DB, sets global AppContext
            {
                return;
            }
            c.AfterDBSetup(N.App.AppContext, args);                                                                    // apply the cmd line
            string[] possiblepaths = NCCFile.FileCtrl.ProcessINCC5IniFile(N.App.Logger(LMLoggers.AppSection.Control)); // iRap: optional use of INCC5 ini file to find results and output paths
            if (possiblepaths.Length > 2)                                                                              // use the iRAP defined input, results and log file paths
            {
                N.App.AppContext.FileInput = possiblepaths[0];
                if (System.IO.Directory.Exists(possiblepaths[1]))
                {
                    N.App.AppContext.ResultsFilePath = possiblepaths[1];
                }
                if (System.IO.Directory.Exists(possiblepaths[2]))
                {
                    N.App.AppContext.LogFilePath = possiblepaths[2];
                }
            }
            // check return bool and exit here on error
            bool initialized = N.App.Initialize(c);

            if (!initialized)
            {
                return;
            }

            if (N.App.Config.Cmd.ShowVersion && !N.App.Config.Cmd.Showcfg)
            {
                N.App.Config.Cmd.ShowVersionOnConsole(N.App.Config, N.App.Config.App.Verbose() == TraceEventType.Verbose);
                return;
            }
            else if (N.App.Config.Cmd.Showhelp)
            {
                N.App.Config.ShowHelp();
                return;
            }
            else if (N.App.Config.Cmd.Showcfg)
            {
                NCCConfig.Config.ShowCfg(N.App.Config, N.App.Config.App.Verbose() == TraceEventType.Verbose);
                return;
            }

            LMLoggers.LognLM applog      = N.App.Logger(LMLoggers.AppSection.App);
            bool             OpenResults = N.App.AppContext.OpenResults;

            try
            {
                applog.TraceInformation("==== Starting " + DateTime.Now.ToString("MMM dd yyy HH:mm:ss.ff K") + " [Cmd] " + N.App.Name + " " + N.App.Config.VersionString);
                applog.TraceInformation("==== DB " + N.App.Pest.DBDescStr);
                // These affect the current acquire state, so they occur here and not earlier in the initial processing sequence
                if (!string.IsNullOrEmpty(c.Cur.Detector) && !c.Cur.Detector.Equals("Default"))                 // command line set the value
                {
                    initialized = Integ.SetNewCurrentDetector(c.Cur.Detector, true);
                }
                if (!initialized)
                {
                    goto end;
                }

                if (!string.IsNullOrEmpty(c.Cur.Material) && !c.Cur.Material.Equals("Pu")) // command line set the value
                {
                    initialized = Integ.SetNewCurrentMaterial(c.Cur.Material, true);
                }
                if (!initialized)
                {
                    goto end;
                }

                if (!string.IsNullOrEmpty(c.Cur.ItemId)) // command line set the item value, use it to override the material and other acquire params
                {
                    initialized = Integ.SetNewCurrentMaterial(c.Cur.Material, true);
                }
                if (!initialized)
                {
                    goto end;
                }

                if (!N.App.AppContext.ReportSectional.Equals(NCCConfig.Config.DefaultReportSectional))                 // command line set the value
                {
                    AcquireParameters acq = null;
                    Detector          det = null;
                    Integ.GetCurrentAcquireDetectorPair(ref acq, ref det);
                    acq.review.Scan(N.App.AppContext.ReportSectional);
                    acq.MeasDateTime = DateTime.Now;
                    N.App.DB.UpdateAcquireParams(acq, det.ListMode);
                    N.App.Logger(LMLoggers.AppSection.Control).TraceEvent(LogLevels.Info, 32444, "The current report sections are now " + N.App.AppContext.ReportSectional);
                }
                if (N.App.Config.App.UsingFileInput || N.App.Opstate.Action == NCC.NCCAction.File)
                {
                    if (N.App.AppContext.AssayFromFiles)
                    {
                        N.App.Opstate.Action = NCC.NCCAction.Assay;
                    }
                    else if (N.App.AppContext.HasFileAction)
                    {
                        N.App.Opstate.Action = NCC.NCCAction.File;
                    }
                }

                if (N.App.Config.Cmd.Query != null)
                {
                    AcquireParameters acq = Integ.GetCurrentAcquireParams();
                    System.Collections.Generic.List <string> ls = acq.ToDBElementList(generate: true).AlignedNameValueList;
                    foreach (string s in ls)
                    {
                        Console.WriteLine(s);
                    }
                    OpenResults = false;
                    if (N.App.Opstate.Action == NCC.NCCAction.Nothing)
                    {
                        return;
                    }
                }


                if (N.App.Config.App.UsingFileInput || N.App.Opstate.Action == NCC.NCCAction.File)
                {
                    BuildMeasurement();
                    if (N.App.AppContext.AssayFromFiles)
                    {
                        N.App.Opstate.Action = NCC.NCCAction.Assay;
                    }
                    else if (N.App.AppContext.HasFileAction)
                    {
                        N.App.Opstate.Action = NCC.NCCAction.File;
                    }

                    // file processing for analysis and more
                    FileControlBind filecontrol = new FileControlBind();
                    filecontrol.SetupEventHandlers();
                    filecontrol.StartAction();                      // step into the code and run
                    N.App.Opstate.SOH = NCC.OperatingState.Stopped;
                }
                else
                {
                    BuildMeasurement();
                    DAQControlBind control = new DAQControlBind();
                    DAQ.DAQControl.ActivateDetector(N.App.Opstate.Measurement.Detector);
                    control.SetupEventHandlers();
                    control.StartAction();
                    N.App.Opstate.SOH = NCC.OperatingState.Stopped;
                }
end:
                ;
            } catch (Exception e)
            {
                N.App.Opstate.SOH = NCC.OperatingState.Trouble;
                applog.TraceException(e, true);
                applog.EmitFatalErrorMsg();
            } finally
            {
                N.App.Opstate.SOH = NCC.OperatingState.Stopped;
                N.App.Config.RetainChanges();
                applog.TraceInformation("==== Exiting " + DateTime.Now.ToString("MMM dd yyy HH:mm:ss.ff K") + " [Cmd] " + N.App.Name + " . . .");
                N.App.Loggers.Flush();
                if (OpenResults)
                {
                    Process.Start(System.IO.Path.Combine(Environment.SystemDirectory, "notepad.exe"), LMLoggers.LognLM.CurrentLogFilePath);
                }
            }
        }