2010-07-08 53 views
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值如何设置为intelligably?如果我尝试类似Tool.ErrorCode = ERROR_ACCESS_DENIED之类的内容,则会出现错误消息:“ERROR_ACCESS_DENIED的名称在当前上下文中不存在”。谢谢。

附加信息

我的例子是过于简单化。有没有一种办法是这样的:

Tool.ErrorCode = ERROR_ACCESS_DENIED; 
return Tool.ErrorCode; 

...产生一个编译错误,而不是这样的:

Tool.ErrorCode = 5; 
return Tool.ErrorCode; 

...它的工作原理,但使用的是“幻数。 “我想避免使用幻数。

+0

这是一个巨星downvoting。我会通过。 – 2010-07-08 16:04:39

回答

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

如果你正在寻找一个现成的一套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); 
} 
+0

这并没有解决使用幻数来设置退出代码的问题。 – 2010-07-08 15:20:03

+1

我想知道为什么这是被拒绝的。希望问题不在更新后。我不是一个心灵读者......那会很差。 – 2010-07-08 15:21:11

+0

Microsoft已经在某处定义了这些错误代码。在VC++应用程序中,它们可以通过'#include“Winerror.h”'来访问。 C#中没有类似的东西吗? http://msdn.microsoft.com/en-us/library/ms681381(VS.85)。aspx – 2010-07-08 15:42:26

-2

设置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 Property

+0

这并没有解决使用幻数来设置退出代码的问题。 – 2010-07-08 15:19:14

+1

这个代码片段的问题是如果'Main'方法返回除void以外的任何东西(在这种情况下为'int'),'Environment.ExitCode'的值将被忽略。 – fatuhoku 2012-03-15 11:09:38

+0

我将代码片断更改为返回void,以便Environment.ExitCode不会被忽略。 – 2012-03-15 13:40:09

相关问题