指定应用程序退出时的返回错误代码

发布于 2024-09-08 20:02:31 字数 843 浏览 4 评论 0原文

如何在应用程序退出时指定返回错误代码?如果这是一个 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;

...它有效,但使用“幻数”。我想避免使用幻数。

How can the return error code be specified on application exit? If this were a VC++ application, I could use the SetLastError(ERROR_ACCESS_DENIED) -- return GetLastError() APIs. Is there a way to do this in C#?

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

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

     return Tool.ErrorCode;
  }

How can the Tool.ErrorCode value be set intelligably? If I try something like Tool.ErrorCode = ERROR_ACCESS_DENIED, I get an error, "The name ERROR_ACCESS_DENIED does not exist in the current context." Thanks.

ADDITIONAL INFORMATION

My example is over-simplified. Is there a way to something like this:

Tool.ErrorCode = ERROR_ACCESS_DENIED;
return Tool.ErrorCode;

...which generates a compile-error, rather than this:

Tool.ErrorCode = 5;
return Tool.ErrorCode;

...which works, but uses a "magic number." I'd like to avoid the use of magic numbers.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

反差帅 2024-09-15 20:02:31

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

如果您正在寻找一组现成的 winerror.h 常量来满足您的 C# 需求,那么这里是:

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);
}

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

Environment.Exit(exitCode)

Update

The reason why you get a compile error with "ERROR_ACCESS_DENIED" is because you have not defined it. You need to define it yourself:

const int ERROR_ACCESS_DENIED = 5;

Then you can use:

Environment.Exit(ERROR_ACCESS_DENIED)

Update 2

If you are looking for a ready-made set of winerror.h constants for your C# needs, then here it is:

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

I would probably modify the GetErrorName(...) method to do some caching though, e.g.:

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);
}
感悟人生的甜 2024-09-15 20:02:31

设置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 属性

Set Environment.ExitCode.

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

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

     Environment.ExitCode = Tool.ErrorCode;
  }

See MSDN - Environment.ExitCode Property

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文