1

私は 2 つのプログラムを持っています。1 つはゲームで、もう 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 に答える