public bool StartProcess() { if (IsCompiling) { return(false); } //TODO: What should we do if it is already running? lock (SyncObj) { //double check locking if (IsCompiling) { return(false); } if (IsRunning) { return(false); } DeployedProcess?.Dispose(); ProcessStartInfo startInfo = new ProcessStartInfo(ProcessPath); startInfo.UseShellExecute = false; startInfo.CreateNoWindow = false; startInfo.WorkingDirectory = Path.GetDirectoryName(ProcessPath); DeployedProcess = new Process() { StartInfo = startInfo }; DeployedProcess.EnableRaisingEvents = true; //By default we should restart if it exits. DeployedProcess.Exited += (sender, args) => StartProcess(); return(DeployedProcess.Start()); } }
private void ShutdownProcess() { lock (SyncObj) DeployedProcess.Kill(); }