66 lines
1.8 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|