public void StartServer(string serverId, RemotingAddress serverRA, uint maxFaults, uint minDelay, uint maxDelay) { if (Program.serverProcesses.ContainsKey(serverId)) { throw new RemotingException($"PCS: Server with ID '{ serverId }' already exists."); } var procPath = Path.GetFullPath(Path.Combine(Directory.GetCurrentDirectory() + @"\..\..\..\Server\bin\Debug\Server.exe")); Console.WriteLine($"Starting server:\n\t" + $"ID: {serverId}\n\t" + $"URL: {serverRA.ToString()}\n\t" + $"Max Faults: {maxFaults}\n\t" + $"Min Delay: {minDelay}\n\t" + $"Max Delay: {maxDelay}\n\t" + $"Proc. path: {procPath}"); Process server = RunProcess(procPath, $"{serverId} {serverRA.ToString()} {maxFaults} {minDelay} {maxDelay}"); server.Exited += new EventHandler(delegate(Object o, EventArgs a) { Program.serverProcesses.Remove(serverId); Console.WriteLine($"Server '{serverId}' has exited."); try { PM.InformServerExited(serverId); } catch (Exception ex) { Utilities.WriteError($"Error informing PM that server exited: {ex.Message}."); } }); Program.serverProcesses.Add(serverId, server); }