如何从应用程序获取退出代码。示例:我调用:System.Diagnostic.Start(“regsvr32”,“mydll.dll”);如何从regsvr32获取退出代码?
如何编写一个返回退出代码的应用程序(如regsvr32)。感谢。
我正在使用.NET 4.0& C#。
答案 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
属性,您应该可以使用该属性来获取返回值。