/// <summary> /// Add a new known process. /// </summary> /// <remarks>If the process already exists it is overwritten.</remarks> /// <param name="name">The name of the new process</param> /// <param name="process">Information about the process</param> protected void newProcess(string name, ProcessData process) { log.Info("Added new process: " + name); log.Debug("\t-Executable path: " + process.ExePath); log.Debug("\t-Start folder: " + process.StartFolder); log.Debug("\t-New shell: " + (process.Shell ? "Yes" : "No")); log.Debug("\t-Real executable path: " + process.StartPath); log.Debug("\t-Arguments: " + String.Join<string>(", ", process.StartArguments)); try { mProcesses.Add(name, process); } catch (ArgumentException) { log.WarnFormat("A key with the same name (\"{0}\") already exists. It will be overwritten.", name); mProcesses.Remove(name); mProcesses.Add(name, process); } }
/// <summary> /// Parses process arguments. /// </summary> /// <param name="process">The information about the process</param> /// <param name="line">The line of data from the config file</param> /// <param name="i">The current index</param> private void parseArguments(ProcessData process, string line, int i) { while (i < line.Length) { string arg = nextParameterToken(line, ref i); if (arg != String.Empty) process.addArgument(arg); } }
/// <summary> /// Parses the configuration file. /// </summary> public override void parseConfig() { TextReader inStream = new StreamReader(new FileStream(mFileName, FileMode.Open, FileAccess.Read)); uint l = 0; while (true) { string line = inStream.ReadLine(); l++; if (line == null) break; // Ignores lines starting with another character than space. May be used for comments: if (!line.StartsWith(" ")) { log.DebugFormat("Ignored line \"{0}\"", line); continue; } ProcessData process = new ProcessData(); string name = String.Empty; try { int i = 0; // Find name: name = nextToken(line, ref i); // Find exe path: process.ExePath = nextParameterToken(line, ref i); // Find shell flag: if (!process.parseShell(nextToken(line, ref i))) throw new BadConfigException("Could not parse shell flag token", mFileName, l, (uint) i); // Find start folder: string startFolder = nextParameterToken(line, ref i); if (startFolder != String.Empty) process.StartFolder = startFolder; string startExe = nextParameterToken(line, ref i); if (startExe != String.Empty) process.StartPath = startExe; // Parse arguments: parseArguments(process, line, i); } catch (BadConfigException e) { e.Line = l; throw e; } newProcess(name, process); } inStream.Close(); }