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