Generates an assembly to run in a separate process in order to host an Activator
        public ActivatorProcess(string friendlyName, ProcessDomainSetup setupInfo)
        {
            Logger.InfoFormat("Creating ActivatorProcess for Process Domain '{0}' with the following configuration:", friendlyName);
            LogProcessDomainSetup(setupInfo);

            _friendlyName = friendlyName;
            _setupInfo    = setupInfo;
            _assemblyFile = ActivatorHostAssemblyGenerator.CreateRemoteHostAssembly(friendlyName, setupInfo);
            Logger.InfoFormat("Generated Assembly: {0}", _assemblyFile);

            var startInfo = new ProcessStartInfo
            {
                FileName         = _assemblyFile,
                CreateNoWindow   = true,
                UseShellExecute  = false,
                ErrorDialog      = false,
                WorkingDirectory = _setupInfo.WorkingDirectory,
            };

            if (_setupInfo.EnvironmentVariables != null)
            {
                foreach (var kv in _setupInfo.EnvironmentVariables)
                {
                    startInfo.EnvironmentVariables[kv.Key] = kv.Value;
                }
            }

            _process = new Process
            {
                StartInfo = startInfo
            };

            _setupInfoFile = Path.Combine(setupInfo.ExecutableDirectory, string.Format(ConfigName, friendlyName));

            _process.Exited += Process_Exited;
            _process.EnableRaisingEvents = true;
        }