C#Process StandardOutput。如何从run EXE发送输出?

时间:2013-04-21 06:32:46

标签: c# winforms process output

我有两个程序,一个是游戏,一个是游戏的发射器。我首先创建了启动器,以接收游戏中的基本信息并检测任何类型的退出(崩溃,任务管理器进程停止等)

我将为流程运行器附加我当前的代码,它似乎是互联网上的所有解决方案,但我无法弄清楚的是如何让游戏向启动器发送信息。我试过Console.WriteLine(“login = ...”);但它似乎没有发送任何东西。

     private void button1_Click(object sender, EventArgs e)
     {
        using (Process exeProcess = Process.Start(new ProcessStartInfo() { UseShellExecute = false,
        FileName = "Game.exe",
        WorkingDirectory = Environment.CurrentDirectory,
        RedirectStandardOutput = true}))
        {
            string output = "";
            while (!exeProcess.HasExited)
            {
                try
                {
                    output += exeProcess.StandardOutput.ReadToEnd() + "\r\n";
                }
                catch (Exception exc)
                {
                    output += exc.Message + "::" + exc.InnerException + "\r\n";
                }
            }

            MessageBox.Show(output);
        }
    }

1 个答案:

答案 0 :(得分:1)

关于您的代码,通过添加以下行,您可以获得游戏引发的错误消息。

RedirectStandardError = true,

如果您使用.NET开发游戏,可以按如下方式返回相应的错误代码。根据错误代码,您可以在启动器中显示相应的消息

    enum GameExitCodes
    {
        Normal=0,
        UnknownError=-1,
        OutOfMemory=-2
    }

    //Game Application
    static void Main(string[] args)
    {
        try
        {
            // Start game

            Environment.ExitCode = (int)GameExitCodes.Normal;
        }
        catch (OutOfMemoryException)
        {
            Environment.ExitCode = (int)GameExitCodes.OutOfMemory;
        }
        catch (Exception)
        {
            Environment.ExitCode = (int)GameExitCodes.UnknownError;
        }
    }

注意:您可以查看在C#中开发的此open source game launcher作为参考,或根据您的需要进行修改。

编辑:根据评论添加信息

有两种方法可以在两个.NET进程之间进行通信。他们是

  1. Anonymous Pipes
  2. Named Pipes
  3. Using Win32 WM_COPYDATA
  4. MSMQ