public ExeSessionProcess(Session session) { _session = session; _logger = session.Logger; _incompleteLine = string.Empty; using (_logger.CreateCallstack()) { string executablePath = GetExecutablePath(); _logger.WriteLine("EXE executable path resolved to {0}", executablePath); string assemblyFilePath = _logger.GetAssemblyFilePath(); FileVersionInfo assemblyVersion = null; if (assemblyFilePath != null) { assemblyVersion = FileVersionInfo.GetVersionInfo(assemblyFilePath); } CheckVersion(executablePath, assemblyVersion); string configSwitch; if (_session.DefaultConfiguration) { configSwitch = "/ini=nul "; } else { if (!string.IsNullOrEmpty(_session.IniFilePath)) { configSwitch = string.Format(CultureInfo.InvariantCulture, "/ini=\"{0}\" ", _session.IniFilePath); } else { configSwitch = ""; } } string logSwitch = null; if (!string.IsNullOrEmpty(_session.SessionLogPath)) { logSwitch = string.Format(CultureInfo.InvariantCulture, "/log=\"{0}\" ", LogPathEscape(_session.SessionLogPath)); } string xmlLogSwitch = string.Format(CultureInfo.InvariantCulture, "/xmllog=\"{0}\" ", LogPathEscape(_session.XmlLogPath)); string assemblyVersionStr = (assemblyVersion == null) ? "unk" : string.Format(CultureInfo.InvariantCulture, "{0}{1}{2} ", assemblyVersion.ProductMajorPart, assemblyVersion.ProductMinorPart, assemblyVersion.ProductBuildPart); string assemblyVersionSwitch = string.Format(CultureInfo.InvariantCulture, "/dotnet={0} ", assemblyVersionStr); string arguments = xmlLogSwitch + "/xmlgroups /nointeractiveinput " + assemblyVersionSwitch + configSwitch + logSwitch + _session.AdditionalExecutableArguments; Tools.AddRawParameters(ref arguments, _session.RawConfiguration, "/rawconfig"); _process = new Process(); _process.StartInfo.FileName = executablePath; _process.StartInfo.WorkingDirectory = Path.GetDirectoryName(executablePath); _process.StartInfo.Arguments = arguments; _process.StartInfo.UseShellExecute = false; _process.Exited += ProcessExited; if (_logger.Logging) { _process.OutputDataReceived += ProcessOutputDataReceived; _process.ErrorDataReceived += ProcessErrorDataReceived; } } }