0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

プロセス実行のエラーを簡単に出力する方法

Last updated at Posted at 2025-09-25

1. はじめに

本記事では、C#で同期実行したプロセスで発生したWindows APIの失敗を、Win32Exceptionクラスを用いて取得し出力する方法についてご紹介します。

2. 基本知識

2.1 システムエラーコード

Windows OSによって定義されたエラー状態を表す整数値です。
これらのエラーコードは、アプリケーションやシステムコンポーネントがエラーを返す際に使用され、開発者やサポート担当者が問題を特定するための手掛かりとなります。

2.2 Win32Exception

NET Frameworkが提供するクラスで、Windows APIの呼び出しで発生したエラーから、そのエラーコードに対応するメッセージを提供する例外クラスです。
Windowsのシステムエラーコードに対応しており、Windows APIが定義しているエラーコードを基に、そのエラーコードに関連付けられたエラーメッセージをシステムから取得して表示します。
エラーメッセージの言語はローカルのシステム設定や言語設定によって自動適用されます。

3. 実装

以下のコードは、cmd.exe /c invalid_command(不正な引数コマンド) を実行して、発生したエラーを取得してエラーメッセージを表示します。

3.1 ソースコード

C#
using System;
using System.Diagnostics;
using System.ComponentModel;

namespace Win32ErrorCodeExample
{
    class Program
    {
        static void Main(string[] args)
        {
            // 不正なコマンドを実行して故意にエラーを発生させる
            var info = new ProcessStartInfo("cmd.exe", "/c invalid_command")
            {
                CreateNoWindow = true,
                UseShellExecute = false,
                RedirectStandardOutput = true,
                RedirectStandardError = true
            };

            using (var process = Process.Start(info))
            {
                // 同期的にプロセスを終了するまで待機
                process.WaitForExit();

                // プロセスの終了コードを取得
                int exitCode = process.ExitCode;

                // エラーが発生している場合はエラーメッセージを取得して表示
                if (exitCode != 0)
                {
                    string errorMessage = GetWin32ErrorMessage(exitCode);
                    Console.WriteLine($"エラーが発生しました: {errorMessage} (コード: {exitCode})");
                }
                else
                {
                    Console.WriteLine("プロセスが正常に終了しました。");
                }
            }
        }

        // Win32エラーメッセージを取得するメソッド
        static string GetWin32ErrorMessage(int errorCode)
        {
            return new Win32Exception(errorCode).Message;
        }
    }
}

3.2 実行結果

エラーが発生しました: ファンクションが間違っています。 (コード: 1)

4. 解説

4.1 プロセスの実行

ProcessStartInfoを使用して、外部コマンドの設定を行っています。

  • CreateNoWindow:実行時にウィンドウを表示せずに実行
  • UseShellExecute:シェルを使用してプロセスを開始
  • RedirectStandardOutput・RedirectStandardError: 標準出力および標準エラーを取得可能に設定

Process.Start(info)で設定されたプロセスを開始し、WaitForExitで終了を待機します。
その後、プロセスの終了コードをExitCodeプロパティから取得します。

4.2 Win32Exceptionを使用してエラーメッセージを取得

Win32Exception(errorCode).Message

Win32ExceptionクラスのMessageプロパティを使用して、システムエラーコードに紐付けられたメッセージを取得します。

今回のソースコードでは以下の内容を取得しています。

  • エラーコード:1
  • エラーメッセージ:ファンクションが間違っています。

5. おわりに

エラーコードだけでなくエラーメッセージも出力することで、理解しやすいエラー通知が実装できました。
実行ログの出力時などに活用することで、エラーコードをテキスト形式で簡単に扱えるため、開発者が読みやすいログ生成が可能です。

6. 参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?