编写应用程序以获取或返回退出代码

时间:2011-05-13 15:40:59

标签: c# .net

如何从应用程序获取退出代码。示例:我调用:System.Diagnostic.Start(“regsvr32”,“mydll.dll”);如何从regsvr32获取退出代码?

如何编写一个返回退出代码的应用程序(如regsvr32)。感谢。

我正在使用.NET 4.0& C#。

6 个答案:

答案 0 :(得分:4)

这实际上是两个单独的问题,但是......退出代码是从程序的Main函数返回的值。所以:

public static int Main()
{
    // code

    return 0;
}

将返回退出代码0.除非前面的// code做了不同的事情。

使用Process'ExitCode属性从要执行的应用程序中获取此值。

程序成功时通常会返回

0。其他任何事情都是失败的,但这是一个解释问题。

答案 1 :(得分:4)

这样的事情就足够了。

private int CallSomething()
{
    using ( var p = new Process() )
    {
        p.StartInfo = new ProcessStartInfo("RegSvr32");
        p.Start();

        p.WaitForExit();

        return p.ExitCode;
    }
}

p.ExitCode是被调用进程的退出代码。

答案 2 :(得分:3)

这是一个帮助程序类,它向您展示如何获取退出代码,以及输出流和错误流。可能就是你要找的东西。

/// <summary>
///   Run an executable.
/// </summary>
/// <param name = "executablePath">Path to the executable.</param>
/// <param name = "arguments">The arguments to pass along.</param>
/// <param name = "workingDirectory">The directory to use as working directory when running the executable.</param>
/// <returns>A RunResults object which contains the output of the executable, plus runtime information.</returns>
public static RunResults RunExecutable( string executablePath, string arguments, string workingDirectory )
{
    RunResults runResults = new RunResults();

    if ( File.Exists( executablePath ) )
    {
        using ( Process proc = new Process() )
        {
            proc.StartInfo.FileName = executablePath;
            proc.StartInfo.Arguments = arguments;
            proc.StartInfo.WorkingDirectory = workingDirectory;
            proc.StartInfo.UseShellExecute = false;
            proc.StartInfo.RedirectStandardOutput = true;
            proc.StartInfo.RedirectStandardError = true;
            proc.OutputDataReceived +=
                ( o, e ) => runResults.Output.Append( e.Data ).Append( Environment.NewLine );
            proc.ErrorDataReceived +=
                ( o, e ) => runResults.ErrorOutput.Append( e.Data ).Append( Environment.NewLine );

            proc.Start();
            proc.BeginOutputReadLine();
            proc.BeginErrorReadLine();

            proc.WaitForExit();
            runResults.ExitCode = proc.ExitCode;
        }
    }
    else
    {
        throw new ArgumentException( "Invalid executable path.", "executablePath" );
    }

    return runResults;
}

public class RunResults
{
    public int ExitCode;
    public StringBuilder Output = new StringBuilder();
    public StringBuilder ErrorOutput = new StringBuilder();
}

为了自己返回退出代码,只需从main()方法返回一个整数。

答案 3 :(得分:2)

例如,您可以在控制台应用程序中从Main()方法返回一个整数。

static int Main(string[] args)
{
    try
    {
        //do some stuff
        return 0; //everything is good
    }
    catch //you will want more specific error-handling, catch-all is for example only
    {
        return 1; //something blew up!
    }
}

答案 4 :(得分:1)

使用Process.ExitCode属性

答案 5 :(得分:1)

看起来System.Diagnostic.Start方法返回System.Diagnostic.Process类。此类具有ExitCode属性,您应该可以使用该属性来获取返回值。