JD2022-TU1/main/tools/apps/Packager/Tasks/ToolTask.cs

66 lines
1.8 KiB
C#

using System;
using System.Diagnostics;
using System.IO;
namespace Packager.Tasks
{
public abstract class ToolTask: Task, IDisposable
{
private Process _toolProcess;
protected void LaunchTool(string toolPath, string args)
{
LogMessage(false, $"Launch {Path.GetFileName(toolPath)} {args}.");
_toolProcess = new Process
{
StartInfo =
{
CreateNoWindow = true,
FileName = toolPath,
Arguments = args,
WorkingDirectory = Path.GetDirectoryName(toolPath),
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true
},
EnableRaisingEvents = true
};
_toolProcess.OutputDataReceived += OutputMessageReceived;
_toolProcess.ErrorDataReceived += ErrorMessageReceived;
//m_toolProcess.Exited += new EventHandler(ProcessExited);
_toolProcess.Start();
_toolProcess.BeginOutputReadLine();
_toolProcess.BeginErrorReadLine();
_toolProcess.WaitForExit();
ProcessExited();
}
public void OutputMessageReceived(object sender, DataReceivedEventArgs e)
{
if(e.Data != null)
LogMessage(false, e.Data);
}
public void ErrorMessageReceived(object sender, DataReceivedEventArgs e)
{
if(e.Data != null)
LogMessage(true, e.Data);
}
public virtual void ProcessExited()
{
ErrorCode = _toolProcess.ExitCode;
}
public virtual void Dispose()
{
_toolProcess?.Dispose();
}
}
}