启动外挂执行程序方法

启动外挂执行程序方法

在有些系统开发过程中需要启动第三方独立的软件进行计算或者处理某个事件,可以在process中启动该程序,一般通过两种方式:

  1. 显示控制台窗口
  2. 后台静默运行

步骤如下:

  1. 定义执行程序路径
1
protected static string maiexecutor = Application.StartupPath + "\\runtimes\\thirdparty.exe" ;
  1. 点击按钮执行启动
    配置文件在WorkPath文件夹中
1
2
3
4
5
6
7
8
9
10
11
   if (ImGui.ImageButton(XShareData.mModelStartID, XShareData.MiniToolbarIconSize))
{
this.DoSerialCaculator();
}
protected void DoSerialCaculator()
{
Root.Instance.RunInvoke(() =>
{
XShareData.Instance.RunCommand(maiexecutor, WorkPath, this.Process_Exited);
});
}

/// <summary>
/// 后台运行模式
/// </summary>
/// <param name="execute"></param>
/// <param name="targetdirection"> "./runtimes/input"</param>
/// <param name="args"></param>
public void RunCommand(string execute, string targetdirection, System.EventHandler exit, string args = "")
{
    System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
    Process process = new Process();
    process.StartInfo.FileName = execute;
    process.StartInfo.WorkingDirectory = targetdirection;
    process.StartInfo.UseShellExecute = false; //false 直接从可执行文件创建进程

    process.StartInfo.RedirectStandardInput = true;
    process.StartInfo.RedirectStandardOutput = true;
    process.StartInfo.RedirectStandardError = true;
    process.StartInfo.CreateNoWindow = true;

    process.OutputDataReceived += process_OutputDataReceived;
    process.ErrorDataReceived += Process_ErrorDataReceived;
    process.Exited += exit;

    process.Start();
    process.EnableRaisingEvents = true;
    process.BeginOutputReadLine();
    process.BeginErrorReadLine();
}
/// <summary>
/// CMD窗口模式
/// </summary>
/// <param name="execute"></param>
/// <param name="targetdirection"></param>
/// <param name="exit"></param>
/// <param name="args"></param>
public void RunWindowCommand(string execute, string targetdirection, System.EventHandler exit, string args = "")
{
    Process process = new Process();
    process.StartInfo.FileName = execute;
    process.StartInfo.WorkingDirectory = targetdirection;// "./runtimes/input"
    process.StartInfo.UseShellExecute = true; //false 直接从可执行文件创建进程
    process.StartInfo.Arguments = args;
    process.OutputDataReceived += process_OutputDataReceived;
    process.ErrorDataReceived += Process_ErrorDataReceived;
    process.Exited += exit;
    process.Start();
}

protected void Process_ErrorDataReceived(object sender, DataReceivedEventArgs e)
{
    System.Console.WriteLine(e.Data);
    Gaiaxis.Consoles.GraphicsManager.Instance.ShowFlareText(e.Data, false);
}
protected void process_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
    System.Console.WriteLine(e.Data);
    Gaiaxis.Consoles.GraphicsManager.Instance.ShowFlareText(e.Data, false);
}