74 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System.Collections;
 | |
| using System.Diagnostics;
 | |
| using System.Text;
 | |
| 
 | |
| namespace UnrealSharpBuildTool;
 | |
| 
 | |
| public class BuildToolProcess : Process
 | |
| {
 | |
|     public BuildToolProcess(string? fileName = null)
 | |
|     {
 | |
|         if (fileName == null)
 | |
|         {
 | |
|             if (string.IsNullOrEmpty(Program.BuildToolOptions.DotNetPath))
 | |
|             {
 | |
|                 fileName = "dotnet";
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 fileName = Program.BuildToolOptions.DotNetPath;
 | |
|             }
 | |
|         }
 | |
|         
 | |
|         StartInfo.FileName = fileName;
 | |
|         StartInfo.CreateNoWindow = true;
 | |
|         StartInfo.ErrorDialog = false;
 | |
|         StartInfo.UseShellExecute = false;
 | |
|         StartInfo.RedirectStandardError = true;
 | |
|         StartInfo.RedirectStandardInput = true;
 | |
|         StartInfo.RedirectStandardOutput = true;
 | |
|         EnableRaisingEvents = true;
 | |
|     }
 | |
|     
 | |
|     public bool StartBuildToolProcess()
 | |
|     {
 | |
|         StringBuilder output = new StringBuilder();
 | |
|         OutputDataReceived += (sender, e) =>
 | |
|         {
 | |
|             if (e.Data != null)
 | |
|             {
 | |
|                 output.AppendLine(e.Data);
 | |
|             }
 | |
|         };
 | |
|             
 | |
|         ErrorDataReceived += (sender, e) =>
 | |
|         {
 | |
|             if (e.Data != null)
 | |
|             {
 | |
|                 output.AppendLine(e.Data);
 | |
|             }
 | |
|         };
 | |
|             
 | |
|         if (!Start())
 | |
|         {
 | |
|             throw new Exception("Failed to start process");
 | |
|         }
 | |
|             
 | |
|         BeginErrorReadLine();
 | |
|         BeginOutputReadLine();
 | |
|         WaitForExit();
 | |
| 
 | |
|         if (ExitCode != 0)
 | |
|         {
 | |
|             string errorMessage = output.ToString();
 | |
|             if (string.IsNullOrEmpty(errorMessage))
 | |
|             {
 | |
|                 errorMessage = "BuildTool process exited with non-zero exit code, but no output was captured.";
 | |
|             }
 | |
|             
 | |
|             throw new Exception($"BuildTool process failed with exit code {ExitCode}:\n{errorMessage}");
 | |
|         }
 | |
| 
 | |
|         return true;
 | |
|     }
 | |
| } |