1

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

我将附上我当前的进程运行器代码,它似乎是互联网上的所有解决方案,但我不知道如何让游戏向启动器发送信息。我试过 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);
        }
    }
4

1 回答 1

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# 开发的开源游戏启动器作为参考,或根据您的需要对其进行修改。

编辑:根据评论添加信息

有多种方法可以在 2 个 .NET 进程之间启用通信。他们是

  1. 匿名管道
  2. 命名管道
  3. 使用 Win32 WM_COPYDATA
  4. MSMQ
于 2013-04-21T06:59:36.887 回答