4

アプリケーションの終了時にリターンエラーコードを指定するにはどうすればよいですか? これが VC++ アプリケーションであれば、SetLastError(ERROR_ACCESS_DENIED)-- return GetLastError()API を使用できます。C#でこれを行う方法はありますか?

  static int Main(string[] args)
  {
     Tool.Args = args;

     Application.EnableVisualStyles();
     Application.SetCompatibleTextRenderingDefault(false);
     Application.Run(new Download_Tool());

     return Tool.ErrorCode;
  }

どのようにTool.ErrorCode値を分かりやすく設定できますか? のようなことをしようとするとTool.ErrorCode = ERROR_ACCESS_DENIED、「現在のコンテキストに ERROR_ACCESS_DENIED という名前は存在しません」というエラーが表示されます。ありがとう。

追加情報

私の例は単純化しすぎています。このような方法はありますか:

Tool.ErrorCode = ERROR_ACCESS_DENIED;
return Tool.ErrorCode;

...これではなく、コンパイルエラーを生成します:

Tool.ErrorCode = 5;
return Tool.ErrorCode;

...これは機能しますが、「マジック ナンバー」を使用します。マジックナンバーの使用は避けたいです。

4

2 に答える 2

9

http://msdn.microsoft.com/en-us/library/system.environment.exit.aspx

Environment.Exit(exitCode)

アップデート

「ERROR_ACCESS_DENIED」でコンパイルエラーになるのは、定義していないからです。自分で定義する必要があります。

const int ERROR_ACCESS_DENIED = 5;

次に、次を使用できます。

Environment.Exit(ERROR_ACCESS_DENIED)

更新 2

C# のニーズに合わせて既製の winerror.h 定数セットをお探しの場合は、次のとおりです。

http://www.pinvoke.net/default.aspx/Constants/WINERROR.html

ただし、おそらく GetErrorName(...) メソッドを変更して、キャッシュを実行します。たとえば、次のようになります。

private static Dictionary<int, string> _FieldLookup;

public static bool TryGetErrorName(int result, out string errorName)
{
    if (_FieldLookup == null)
    {
        Dictionary<int, string> tmpLookup = new Dictionary<int, string>();

        FieldInfo[] fields = typeof(ResultWin32).GetFields();

        foreach (FieldInfo field in fields)
        {
            int errorCode = (int)field.GetValue(null);

            tmpLookup.Add(errorCode, field.Name);
        }

        _FieldLookup = tmpLookup;
    }

    return _FieldLookup.TryGetValue(result, out errorName);
}
于 2010-07-08T15:03:21.107 に答える
-1

設定しEnvironment.ExitCodeます。

static void Main(string[] args)
  {
     Tool.Args = args;

     Application.EnableVisualStyles();
     Application.SetCompatibleTextRenderingDefault(false);
     Application.Run(new Download_Tool());

     Environment.ExitCode = Tool.ErrorCode;
  }

MSDN - Environment.ExitCode プロパティを参照してください。

于 2010-07-08T15:07:51.283 に答える