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; | |||
|  |     } | |||
|  | } |